橘子味的心
标题:匹配运算符

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

下面通过一个简单的例子来理解匹配运算符:

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

编译输出结果如下 -


分类