📜  使用Match运算符的Rust控制流

📅  最后修改于: 2021-01-08 13:42:50             🧑  作者: Mango

匹配运算符

匹配运算符允许我们将值与一系列模式进行比较,并在找到匹配项时执行代码。模式可以是字面量值,变量名,通配符和许多其他内容。

让我们通过一个简单的示例了解match运算符:

 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是一种自定义数据类型,由四个变体组成,分别是C,Cplus,Java和Csharp。 match运算符将语言的值与match运算符块中给定的表达式进行匹配。

与选配

在某些情况下要获取T的内部值时,将使用Option

Option 由两个变体组成:

  • 无:表示失败或缺乏价值。
  • Some(value):这是一个用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
{
  
  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)
{
  match n
  {
    Some(n)=>println!("{}is a Number",n),
  }
}

输出: