Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 为什么具有未知标识符的匹配表达式会编译并运行?_Rust - Fatal编程技术网

Rust 为什么具有未知标识符的匹配表达式会编译并运行?

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 =

我希望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 = 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",
};