首页 > 解决方案 > 通过链接匹配从字符串转换时如何验证位数?

问题描述

我刚刚完成了Rust Programming Language的Programming a Guessing Game章节。我现在想为位数添加验证,但找不到令人满意的方法。

我可以通过替换来实现它

let guess: u32 = match guess.trim().parse() {
    Ok(num) => num,
    Err(_) => {
        println!("Please type a number.");
        continue;
    },
};

let guess = guess.trim();
if guess.parse::<u32>().is_err() || guess.chars().count() > 2 {
    println!("Please type a number from 1 to 100.");
    continue;
}
let guess: u32 = match guess.parse() {
    Ok(num) => num,
    Err(_) => continue, // this will never happen
};

我更喜欢这样做的方式是通过某种方式链接匹配,但我无法弄清楚。

标签: validationrust

解决方案


你不需要链式匹配。你只需要一个不同的模式:

let guess: u32 = match guess.trim().parse() {
    Ok(num @ 1...100) => num,
    _ => {
        println!("Please type a number within 1-99.");
        continue;
    },
};

这个模式的意思是“如果它是Ok并且它有大于 0 但小于 100 的东西,返回它的内容,否则打印消息并继续。”


推荐阅读