匹配運算符

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

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

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),
  }
}

編譯輸出結果如下 -


上一篇: Rust枚舉 下一篇: Rust if let控制流程