Keyword match

source ·
Expand description

基于模式匹配的控制流。

match 可用于有条件地执行代码。 必须显式或通过使用通配符 (例如 match 中的 _) 来详尽地处理每个模式。

由于 match 是表达式,因此也可以返回值。

let opt = Option::None::<usize>;
let x = match opt {
    Some(int) => int,
    None => 10,
};
assert_eq!(x, 10);

let a_number = Option::Some(10);
match a_number {
    Some(x) if x <= 5 => println!("0 to 5 num = {x}"),
    Some(x @ 6..=10) => println!("6 to 10 num = {x}"),
    None => panic!(),
    // 所有其他数字
    _ => panic!(),
}
Run

match 可用于访问枚举的内部成员并直接使用它们。

enum Outer {
    Double(Option<u8>, Option<String>),
    Single(Option<u8>),
    Empty
}

let get_inner = Outer::Double(None, Some(String::new()));
match get_inner {
    Outer::Double(None, Some(st)) => println!("{st}"),
    Outer::Single(opt) => println!("{opt:?}"),
    _ => panic!(),
}
Run

有关 match 和常规匹配的更多信息,请参见 Reference