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 中的模式,請參閱「模式比對」。
- 請將比對運算式儲存為變數,然後顯示出來。
- 請移除
.as_deref()並說明錯誤。std::env::args().next()會傳回Option<String>,但我們無法與String進行比對。as_deref()會將Option<T>轉換成Option<&T::Target>。在我們的案例中,這會將Option<String>轉換成Option<&str>。- 我們現在可以使用模式比對,與
Option內的&str進行比對。