非详尽匹配i32即使它是
Rust 抱怨那场比赛并不详尽。这是 Rust 的限制还是我错过了什么?
fn main() {
let x = 10;
match x {
1 => {},
y if y < 1 => {},
y if y > 1 => {}
}
}
回答
Rustif在验证穷举时不会处理表达式。鉴于此,您要么需要添加一个标记为无法访问的全能匹配,例如
fn main() {
let x = 10;
match x {
1 => {},
y if y < 1 => {},
y if y > 1 => {}
_ => unreachable!()
}
}
或者根据您的逻辑,更好的选择是根本不包括最后一个if,例如
fn main() {
let x = 10;
match x {
1 => {},
y if y < 1 => {},
y => {}
}
}
因为match如果前一个失败,它只会到达最后一个。
有关的:
- 为什么带有保护子句的匹配模式不是详尽无遗的?