Rust 非穷举匹配i32,即使是

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{

Rust抱怨说那场比赛不全面。这是生锈的极限还是我错过了什么

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 => {}
  }
}