Rust之match、let、lf-let关键字

match、let与if-let

Posted by 汤汤 on December 4, 2024

来自 black-hat-rust

  —– 名称 导航
枚举 Option Rust之option、result枚举类型
枚举 Result Rust之option、result枚举类型
枚举变体 Some Rust之option、result枚举类型
枚举变体 Ok Rust之option、result枚举类型
枚举变体 Err Rust之option、result枚举类型
关键字 match Rust之match、let、lf-let关键字
关键字 let Rust之match、let、lf-let关键字
关键字 if let Rust之match、let、lf-let关键字
接口 Error Rust之Error接口(trait)

match 关键字

用于执行模式匹配,根据不同的模式pattern对值进行分支处理 类似于C中的switch

用法

match target_value0{
  pattern1 => expression1,
  pattern2 => expression2,
  _ => dafault_expression, // _ 表示通配符,处理未被匹配的情况
}

常见的匹配模式有哪些

  1. 匹配整数1、字符'c'、布尔值
  2. 匹配变量
  3. 匹配元组(1,b)
    • 对元组中的各个元素进行模式匹配,实际上还是匹配单个元素,类似于第1.匹配用法
  4. 匹配枚举
    • Option枚举SomeNone两个变体;Result枚举有TErr两个变体。
    • 🛎️matchOption(也包括Result)的联动只是match匹配模式的一种,和前面匹配整数等没有什么差别,don’t worry
  5. 匹配结构体
    • 解构结构体,并对字段进行模式匹配
struct Point{
  x: i32,
  y: i32,
}

let point = Point{x: 1, y: 2};
match point {
  Point{x:1, y}=>println!("find the point! x = 1, y={}",y),//匹配x=1的情况,解构y
  _ => println!("another point"),
}

特点

顺序匹配
提前返回
强类型检查

会检查所有分支,若存在没有覆盖的情况,编译器会警告

let:变量绑定

  • 普通变量绑定(变量声明)
    • let x = 5;
  • 模式匹配绑定(元组解构)
    • let (a, b) = (1, 2); //将元组解构给a和b

🛎️🛎️ 这里的let关键字只能用于完全匹配,let a_option = Some(3); let Some(value) = a_option; 第二条语句a_option可能为None,因此是不对的噢!编译器会报错。正确的姿势应该是:if let{} else{}

if let:条件模式匹配

通常用于处理枚举类型(OptionResult)或部分匹配的情形 特点:只处理匹配的情况,忽略不匹配的情况

::chestnut::

1  let a = Some(10);
   ...
2  lf let Some(value) = a{
3     println!("解包出来的值为{}", value)
4  }else{
5     println!("值为空") //a为None
6  }
// 这里必须得解释一下为什么Some包装后的a可能为空
// 示例代码过于简单,实际在代码第一行的变量声明和第二行的变量读取之间可能存在其他操作
// 比如:a = None

总结与比较

let if let
用途 完全匹配 条件匹配
常用场景 变量声明,元组解构 枚举类型的部分匹配