穷举整数匹配

mai*_*n-- 5 rust

我试着穷尽地匹配这样的整数:

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仍然需要明显无法到达的_手臂?

var*_*kor 5

详尽的整数匹配在 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)