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

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

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

  1. enum Computerlanguage
  2. {
  3. C,
  4. Cplus,
  5. Java,
  6. Csharp,
  7. }
  8. fn language(language:Computerlanguage)
  9. {
  10. match language
  11. {
  12. Computerlanguage::C=> println!("C language"),
  13. Computerlanguage::Cplus=> println!("C++ language"),
  14. Computerlanguage::Java=> println!("Java language"),
  15. Computerlanguage::Csharp=> println!("C# language"),
  16. }
  17. }
  18. fn main()
  19. {
  20. language(Computerlanguage::C);
  21. language(Computerlanguage::Cplus);
  22. language(Computerlanguage::Java);
  23. language(Computerlanguage::Csharp);
  24. }
  25. Rust

执行上面示例代码,得到以下结果 -

  1. C language
  2. C++ language
  3. Java language
  4. C# language
  5. Shell

在上面的示例中,Computerlanguage是一种自定义数据类型,由四种变体组成:CCplusJavaCsharp。 匹配运算符将语言的值与匹配运算符块中给出的表达式匹配。

与选项T匹配

当想要在某些情况下获得T的内部值时,使用选项<T>

选项 <T>包含两个变体:

  • None:表示失败或缺少值。
  • 一些(值):它是一个用T包装值的元组结构。

通过下面一个例子来理解:

  1. fn main()
  2. {
  3. even_number(2);
  4. even_number(3);
  5. }
  6. fn even_number(n:i32)
  7. {
  8. let num=n;
  9. match checked_even(n)
  10. {
  11. None=>println!("None"),
  12.  
  13. Some(n)=>
  14. {
  15. if n==0
  16. {
  17. println!("{} is a even number",num);
  18. }
  19. else
  20. {
  21. println!("{} is a odd number",num);
  22. }},
  23. }
  24. }
  25. fn checked_even(number:i32)->Option<i32>
  26. {
  27.  
  28. Some(number%2)
  29.  
  30. }
  31. Rust

执行上面示例代码,得到以下结果 -

2 is a even number
3 is a odd number

匹配详尽

在Rust中,匹配是详尽的,即,应该尽可能地使代码有效。假设忘记编写None情况,那么Rust编译器将显示“模式 None 未覆盖”的错误。

通过下面一个例子来理解:

  1. fn main()
  2. {
  3. Some(5);
  4. }
  5. fn Value(n:Option<i32>)
  6. {
  7. match n
  8. {
  9. Some(n)=>println!("{}is a Number",n),
  10. }
  11. }
  12. Rust

编译输出结果如下 -