Rust 为什么具有未知标识符的匹配表达式会编译并运行?
我希望Rust编译器会抱怨match中丢失的案例以及未知的标识符:Rust 为什么具有未知标识符的匹配表达式会编译并运行?,rust,Rust,我希望Rust编译器会抱怨match中丢失的案例以及未知的标识符: pub enum MyEnum { Case1, Case2, } impl MyEnum { fn my_func(&self) { match self { _whatever_string => println!("Why am I printed ?"), } } } fn main() { let x =
pub enum MyEnum {
Case1,
Case2,
}
impl MyEnum {
fn my_func(&self) {
match self {
_whatever_string => println!("Why am I printed ?"),
}
}
}
fn main() {
let x = MyEnum::Case1;
x.my_func();
}
它为什么编译并调用
println
?您的示例是一个特例:
考虑最后一个案例(\uu
),它与前面没有提到的任何内容相匹配。编译器不会抱怨缺少案例(因为“其他所有内容”都包含在最后一个分支中)
您的示例本质上是相同的:一个匹配
,一个单臂覆盖所有内容。您还可以编写\uu
,而不是\u字符串
,或其他标识符,然后可以在相应的arm中使用
因此,这个
match
只匹配并执行其单臂中的语句。编译器看到单个分支涵盖了所有内容,无需抱怨。高度相关:感谢您的回答。我以为只有‘‘’被接受为默认的arm,但似乎不是。我甚至可以添加更多“which_identifier”案例,而无需编译器抱怨(警告除外)。任何隐式类型的、无约束的标识符都可以匹配任何值。
let x = 5;
let number = match x {
1 => "one",
2 => "two",
3 => "three",
4 => "four",
5 => "five",
_ => "something else",
};