我希望Rust编译器抱怨匹配中缺少的情况以及未知的标识符:
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
?
答案 0 :(得分:4)
您的示例是对here进行了解释的特例:
let x = 5;
let number = match x {
1 => "one",
2 => "two",
3 => "three",
4 => "four",
5 => "five",
_ => "something else",
};
考虑最后一种情况(_
),该情况与之前未提及的任何情况都匹配。编译器不会抱怨丢失的情况(因为最后一个分支涵盖了“其他所有内容”)。
您的示例基本上是相同的:一个match
,它的一条手臂覆盖了所有内容。您也可能写了_
而不是_whatever_string
或其他标识符-然后可以在相应的分支中使用它。
因此,此match
仅匹配并执行单个语句中的语句。编译器看到单个分支涵盖了所有内容,并且无需抱怨。