数字条件下的锈匹配

KDN*_*KDN 0 pattern-matching 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,
};
Run Code Online (Sandbox Code Playgroud)

如何扩展匹配以检查数字是否为负数或0(我想在这种情况下抛出错误)并在数字为正数时正常进行?

我尝试在Ok case中的num上添加一个if,但是会抛出一个错误(可能是因为num绑定到guess的值)并且似乎也不是惯用的.

mca*_*ton 6

一个match臂可谨慎:

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