Rust匹配字符串时默认分支不可达且变量未使用,原因何在?
Rust编译器警告原因解析
先看完整代码片段:
io::stdin() .read_line(&mut symbol) .expect("Failed to read line"); println!("You entered {symbol}"); let symbol_x: String = format!("{}", ValidMove::X); let symbol_o: String = format!("{}", ValidMove::O); match &symbol { symbol_x => ok = true, symbol_o => ok = true, _ => ok = false, }
三个警告的具体原因:
第三个分支不可达
Rust的match分支里,symbol_x和symbol_o在这里是新变量绑定,不是引用之前定义的同名变量。这两个分支会匹配任意输入值,把值绑定到新的symbol_x/symbol_o上,等于覆盖了所有可能的情况,所以第三个_分支永远不会被执行,编译器判定它不可达。symbol_x未使用、symbol_o未使用
你用let定义的symbol_x和symbol_o两个字符串变量,在match里根本没被用到——match里的symbol_x是重新绑定的新变量,和之前的不是同一个。之前定义的那两个变量从头到尾没参与任何逻辑,所以编译器提示未使用。
内容的提问来源于stack exchange,提问作者realtebo
相关产品推荐
相关产品推荐

