非详尽匹配 i32 即使它是

raf*_*foo 3 rust

Rust 抱怨那场比赛并不详尽。这是 Rust 的限制还是我错过了什么?

fn main() {
  let x = 10;
  match x {
     1 => {},
     y if y < 1 => {},
     y if y > 1 => {}
  }
}
Run Code Online (Sandbox Code Playgroud)

log*_*yth 5

Rustif在验证穷举时不会处理表达式。鉴于此,您要么需要添加一个标记为无法访问的全能匹配,例如

fn main() {
  let x = 10;
  match x {
    1 => {},
    y if y < 1 => {},
    y if y > 1 => {}
    _ => unreachable!()
  }
}
Run Code Online (Sandbox Code Playgroud)

或者根据您的逻辑,更好的选择是根本不包括最后一个if,例如

fn main() {
  let x = 10;
  match x {
    1 => {},
    y if y < 1 => {},
    y => {}
  }
}
Run Code Online (Sandbox Code Playgroud)

因为match如果前一个失败,它只会到达最后一个。

有关的: