匹配運算子


匹配運算子允許將值與一系列模式進行比較,並在找到匹配項時執行程式碼。 模式可以是文字值,變數名稱,萬用字元和許多其他內容。

下面通過一個簡單的例子來理解匹配運算子:

enum Computerlanguage  
{  
  C,  
  Cplus,  
  Java,  
  Csharp,  
}  
fn language(language:Computerlanguage)  
{  
 match language  
 {  
   Computerlanguage::C=> println!("C language"),  
   Computerlanguage::Cplus=> println!("C++ language"),  
   Computerlanguage::Java=> println!("Java language"),  
   Computerlanguage::Csharp=> println!("C# language"),  
 }  
}  
fn main()  
{  
 language(Computerlanguage::C);  
 language(Computerlanguage::Cplus);  
 language(Computerlanguage::Java);  
 language(Computerlanguage::Csharp);  
}

執行上面範例程式碼,得到以下結果 -

C language
C++ language
Java language
C# language

在上面的範例中,Computerlanguage是一種自定義資料型別,由四種變體組成:CCplusJavaCsharp。 匹配運算子將語言的值與匹配運算子塊中給出的表示式匹配。

與選項T匹配

當想要在某些情況下獲得T的內部值時,使用選項<T>

選項 <T>包含兩個變體:

  • None:表示失敗或缺少值。
  • 一些(值):它是一個用T包裝值的元組結構。

通過下面一個例子來理解:

fn main()  
{  
 even_number(2);  
 even_number(3);  
}  
fn even_number(n:i32)  
{  
 let num=n;  
  match checked_even(n)  
  {  
    None=>println!("None"),  

    Some(n)=>  
    {  
    if n==0  
    {  
    println!("{} is a even number",num);  
    }  
    else  
    {  
    println!("{} is a odd number",num);  
    }},  
  }  
}  
fn checked_even(number:i32)->Option<i32>  
{  

  Some(number%2)  

}

執行上面範例程式碼,得到以下結果 -

2 is a even number
3 is a odd number

匹配詳盡

在Rust中,匹配是詳盡的,即,應該盡可能地使程式碼有效。假設忘記編寫None情況,那麼Rust編譯器將顯示「模式 None 未覆蓋」的錯誤。

通過下面一個例子來理解:

fn main()  
{  
 Some(5);  
}  
fn Value(n:Option<i32>)  
{  
  match n  
  {  
    Some(n)=>println!("{}is a Number",n),  
  }  
}

編譯輸出結果如下 -