【编程】Rust语言入门第6篇——模式匹配

模式匹配

  • match匹配
    功能类似于C++、Python中的switch case语句。
    结合例子来介绍,

    rust 复制代码
      enum Direction {
          East,
          West,
          South,
          North,
      }
      #[derive(Debug)]
      enum UsState {
          Alabama,
          Alaska,
      }
      
      enum Coin {
          Penny,
          Nickel,
          Dime,
          Quarter(UsState), // 25美分硬币
      }
      
      #[derive(Debug)]
      enum MyEnum {
       Foo,
       Bar
      }
      
      fn main() {
         let drc = Direction::East;
         // match返回变量,用以赋值a
         let a = 
         match drc {
             Direction::East => { println!("Go to east!");"East"},
             _ => { println!("Not Go to west!");"Not East"},
         };
         println!("{}",a);
         // 枚举可以包含变量
         let alaska_coin = Coin::Quarter(UsState::Alaska);
         //alaska_coin匹配了第一个分支,state因此获得枚举包含的变量"UsState::Alaska"
         let money = match alaska_coin{Coin::Quarter(state)=>{println!("Alaska coin!");0.25},Coin::Penny=>0.1,Coin::Nickel=>0.5,Coin::Dime=>0.1,};
         println!("{}",money);
      }
  • matches宏
    把表达式与模式匹配,返回true或false。
    下例,使用matches宏过滤列表:

    rust 复制代码
    let mut v = vec![MyEnum::Foo,MyEnum::Bar,MyEnum::Foo];
    let vv = v.iter().filter(|x| matches!(x, MyEnum::Bar));
  • if let
    rust禁止if语句单分支而无else分支;用if let来处置单模式。

    rust 复制代码
      let v = Some(3u8);
      if let Some(3) = v {
         println!("three");
     }
  • 变量遮蔽问题
    模式匹配是一个新代码块,其中绑定的变量、同名变量会遮蔽已有的变量。

    rust 复制代码
    fn main() {
       let age = Some(30);
       println!("在匹配前,age是{:?}",age);
       if let Some(age) = age {
           println!("匹配出来的age是{}",age);
       }	
       println!("在匹配后,age是{:?}",age);
    }
相关推荐
星释2 小时前
Rust 练习册 :Matching Brackets与栈数据结构
数据结构·算法·rust
星释2 小时前
Rust 练习册 :Luhn与校验算法
java·算法·rust
swear014 小时前
VSCODE 插件 rust-analyzer 使用遇到的问题 快捷键查看定义
ide·vscode·rust
微小冷5 小时前
Rust图形界面教程:egui基础组件的使用
后端·rust·gui·egui·button·panel·用户图形界面
星释6 小时前
Rust 练习册 :Nucleotide Codons与生物信息学
开发语言·算法·rust
-大头.6 小时前
Rust高级类型与零成本抽象实战
stm32·单片机·rust
RustFS12 小时前
ansible + docker compose, RustFS MNMD 架构的一键部署之道
rust
Source.Liu13 小时前
【iso8601库】Time 类型解析模块详解(time.rs文件)
rust·iso8601
星释13 小时前
Rust 练习册 :Minesweeper与二维数组处理
开发语言·后端·rust
疏狂难除14 小时前
spiderdemo第22题与webassembly的跨域
开发语言·javascript·爬虫·rust·wasm·mitmproxy