Rust匹配运算符

本文概述

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

让我们通过一个简单的例子了解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运算符块中给定的表达式进行匹配。

与Option <T>匹配

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

Option <T>由两个变体组成:

  • 无:表示失败或价值不足。
  • 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<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枚举匹配运算符

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?