Rust 简明教程

Rust Match (模式匹配)

1. Match

当您面临众多选择时,使用 match 会比编写大量的 if...else 语句更加简单。

match 用于从多个代码块中选择一个来执行:

示例

fn main() {
  let day = 4;

  match day {
    1 => println!("Monday"),
    2 => println!("Tuesday"),
    3 => println!("Wednesday"),
    4 => println!("Thursday"),
    5 => println!("Friday"),
    6 => println!("Saturday"),
    7 => println!("Sunday"),
    _ => println!("Invalid day."),
  }
}

示例解析:

  • 匹配变量 (day) 仅被评估一次。
  • day 变量的值将与每个“分支 (branch)”的值进行比较。
  • 每个分支以一个值开头,随后跟着 => 符号以及一个结果。
  • 如果存在匹配项,则执行关联的代码块。
  • _ 用于指定当没有找到任何匹配项时需要运行的默认代码(类似于其他编程语言中的 default)。
  • 在上述示例中,day 的值为 4,这意味着它将打印 "Thursday"。

2. 多重匹配

您可以使用 | 运算符(逻辑或 OR)一次性匹配多个值:

示例

fn main() {
  let day = 6;

  match day {
    1 | 2 | 3 | 4 | 5 => println!("Weekday"),
    6 | 7 => println!("Weekend"),
    _ => println!("Invalid day"),
  }
}

3. 带有返回值的 match

就像 if 语句一样,match 也可以返回一个值。

这意味着您可以将 match 的结果保存到一个变量中:

示例

fn main() {
  let day = 4;

  let result = match day {
    1 => "Monday",
    2 => "Tuesday",
    3 => "Wednesday",
    4 => "Thursday",
    5 => "Friday",
    6 => "Saturday",
    7 => "Sunday",
    _ => "Invalid day.",
  };

  println!("{}", result);
}

注意: 就像使用 if...else 时一样,match 各个分支返回的结果必须具有相同的类型。