match 表达式

match 关键字 用于将一个值与一个或多个模式进行匹配。从这个意义上讲,它的工作方式 类似于一系列的 if let 表达式:

fn main() {
    match std::env::args().next().as_deref() {
        Some("cat") => println!("Will do cat things"),
        Some("ls")  => println!("Will ls some files"),
        Some("mv")  => println!("Let's move some files"),
        Some("rm")  => println!("Uh, dangerous!"),
        None        => println!("Hmm, no program name?"),
        _           => println!("Unknown program name!"),
    }
}

if let 类似,每个匹配分支必须有相同的类型。该类型是块的最后一个 表达式(如有)。在上例中,类型是 ()

如需详细了解 Rust 中 的模式,请参阅模式匹配

  • 将 match 表达式保存到一个变量中并输出结果。
  • 移除 .as_deref() 并说明错误。
    • std::env::args().next() 会返回 Option<String>,但无法与 String 进行匹配。
    • as_deref() 会将 Option<T> 转换为 Option<&T::Target>。在我们的示例中,这会将 Option<String> 转换为 Option<&str>
    • 现在,我们可以使用模式匹配来匹配 Option 中的 &str