为什么匹配组中的"继续"不必进行类型检查?

wop*_*wop 4 types rust

Rust的猜谜游戏教程有以下示例代码:

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

匹配的结果应该是分支中u32的情况Ok(num).然而,Err(_)分支返回continue,这当然不是一个u32.为什么这个类型检查和工作?

She*_*ter 8

但是,Err(_)分支返回continue

并不是的.continue不是"返回"的东西,它改变了代码流.由于该匹配臂不产生值,因此它的类型无关紧要.在match作为一个整体做类型检测-每一个结果值是一个u32.

您还可以使用其他控制流关键字,如returnbreak.

类似的概念是不同的功能.这些函数保证永不返回,因此可以用它们代替任何表达式.

这允许您也使用像panic!("...")unimplemented!()作为匹配臂的宏,因为它们扩展到分歧功能.