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