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
進行比對。