Rust 非穷举匹配i32,即使是
Rust抱怨说那场比赛不全面。这是生锈的极限还是我错过了什么Rust 非穷举匹配i32,即使是,rust,Rust,Rust抱怨说那场比赛不全面。这是生锈的极限还是我错过了什么 fn main() { let x = 10; match x { 1 => {}, y if y < 1 => {}, y if y > 1 => {} } } fn main(){ 设x=10; 匹配x{ 1 => {}, 如果y{}, 如果y>1=>{} } } 如果我正确地解释了问题,您应该能够使用中提到的\uu捕获其余的数字 使用示例如下所示 匹配x{
fn main() {
let x = 10;
match x {
1 => {},
y if y < 1 => {},
y if y > 1 => {}
}
}
fn main(){
设x=10;
匹配x{
1 => {},
如果y<1=>{},
如果y>1=>{}
}
}
如果我正确地解释了问题,您应该能够使用中提到的\uu
捕获其余的数字
使用示例如下所示
匹配x{
1=>println!(“一”),
_ => ()
}
在验证穷尽性时,如果表达式为,则锈不会处理。有鉴于此,您可能需要添加一个标记为不可访问的全面匹配,例如
fn main() {
let x = 10;
match x {
1 => {},
y if y < 1 => {},
y if y > 1 => {}
_ => unreachable!()
}
}
因为只有在前一个匹配失败时,它才会到达最后一个匹配
相关的:
一个更干净但更详细的替代方法是通过以下方式使用三方比较:
使用std::cmp::排序;
匹配x.cmp(&1){
排序::Less=>{/*…*/},
排序::Equal=>{/*…*/},
排序::更大=>{/*…*/},
}
()
编译器将检查匹配的完整性。特别是,cmp
方法对于实现PartialOrd
但不实现Ord
的类型不可用,因此在编译时将捕获处理不可比较值的失败
这一点在本书的章节中有提到
fn main() {
let x = 10;
match x {
1 => {},
y if y < 1 => {},
y => {}
}
}