我试着穷尽地匹配这样的整数:
fn main() {
for test in range(std::u8::MIN, std::u8::MAX) {
match test {
0x00..0xff => {},
}
}
}
Run Code Online (Sandbox Code Playgroud)
但编译器抱怨:
all.rs:3:9: 6:10 error: non-exhaustive patterns: `_` not covered [E0004]
all.rs:3 match test {
all.rs:4 0x00..0xff => {},
all.rs:5 }
error: aborting due to previous error
Run Code Online (Sandbox Code Playgroud)
但是,涵盖了所有可能的值.快速检查确认了这一点:
fn main() {
for test in range(std::u8::MIN, std::u8::MAX) {
match test {
0x00..0xff => {},
_ => fail!("impossible"),
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在编译并运行它:
$ rustc all.rs
$ ./all
$
Run Code Online (Sandbox Code Playgroud)
涵盖所有可能的值,为什么rustc仍然需要明显无法到达的_手臂?
详尽的整数匹配在 Rust 1.33.0 中得到了稳定。问题中的原始示例现在有效(更新为对范围使用现代语法)。
fn main() {
for i in std::u8::MIN..=std::u8::MAX {
match i {
0x00..=0xff => {}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1150 次 |
| 最近记录: |