match expressions
The match keyword
is used to match a value against one or more patterns. In that sense, it works
like a series of if let expressions:
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!"), } }
Like if let, each match arm must have the same type. The type is the last
expression of the block, if any. In the example above, the type is ().
See pattern matching for more details on patterns in Rust.
- Save the match expression to a variable and print it out.
- Remove
.as_deref()and explain the error.std::env::args().next()returns anOption<String>, but we cannot match againstString.as_deref()transforms anOption<T>toOption<&T::Target>. In our case, this turnsOption<String>intoOption<&str>.- We can now use pattern matching to match against the
&strinsideOption.