Rust数字匹配条件

4

我有以下匹配条件,用于测试输入的猜测是否为有效数字(来自Rust猜数游戏练习):

let mut guess = String::new(); 
io::stdin().read_line(&mut guess).expect("Failed to read");
let guess: u32 = match guess.trim().parse() {
    Ok(num) => num,
    Err(_)  => continue,
};

我该如何扩展匹配以检查数字是否为负数或0(如果是负数,我想抛出一个错误),如果数字为正数,则继续正常操作?

我尝试在Ok的情况下添加if num,但这会引发错误(可能是因为num绑定到guess的值),而且似乎也不符合惯用法。

1个回答

11

match的分支可以使用守卫(guards)

let guess: u32 = match guess.trim().parse() {
    Ok(num) if num > 0 => num,
    Ok(num) => return Err(whatever),
    Err(_)  => continue,
};

我有一个小问题。当我传递一个负数时,我的负数情况(第二个Ok)不起作用。我一直得到Err(_)条件。这是因为解析负数字符串不起作用还是我做错了什么? - KDN
但是你将其解析为 u32,它无论如何都不可能是负数,因此你会得到一个解析错误。这难道不是你想要的吗? - mcarton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接