为何从Rust的match块返回不匹配类型仍能正常运行?
为什么Rust中这个
match分支返回不匹配类型却不报错? 你看到的现象核心原因是**Equal分支里的return ();直接终止了main函数**,根本没走到给变量a赋值的步骤,所以不会触发类型不匹配的错误。
具体来说:
- Rust确实要求
match的所有分支返回类型必须一致,但这里的Equal分支并没有完成match表达式的求值——return语句会立即跳出当前函数,这个分支的执行流程到此为止,不会把()作为match的结果赋值给a。 - 如果把
return ();改成直接返回(),比如:
此时编译器就会报错,提示use std::cmp::Ordering; fn main() { let n = 56; let o = 56; let a: i32 = match n.cmp(&o) { Ordering::Greater => 1, Ordering::Equal => (), Ordering::Less => 3, }; println!("{a}"); }()和i32类型不匹配,这才是Rust强类型检查的正常表现。
内容的提问来源于stack exchange,提问作者Abir Sheikh
相关产品推荐
相关产品推荐

