—– | 名称 | 导航 | |
---|---|---|---|
√ | 枚举 | 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
、字符'c'
、布尔值 - 匹配变量
- 匹配元组
(1,b)
- 对元组中的各个元素进行模式匹配,实际上还是匹配单个元素,类似于第
1.
匹配用法
- 对元组中的各个元素进行模式匹配,实际上还是匹配单个元素,类似于第
- 匹配枚举
- 如
Option枚举
有Some
和None
两个变体;Result
枚举有T
和Err
两个变体。 - 🛎️
match
与Option
(也包括Result
)的联动只是match
匹配模式的一种,和前面匹配整数等没有什么差别,don’t worry
- 如
- 匹配结构体
- 解构结构体,并对字段进行模式匹配
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:条件模式匹配
通常用于处理枚举类型(
Option
Result
)或部分匹配的情形 特点:只处理匹配的情况,忽略不匹配的情况
::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 |
---|---|---|
用途 | 完全匹配 | 条件匹配 |
常用场景 | 变量声明,元组解构 | 枚举类型的部分匹配 |