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
。