Rust开发之——if let运算符(18)

一 概述

  • if let的基本语法与功能
  • if let与match的对比
  • if let结合else的用法

二 if let的基本语法与功能

2.1 核心概念

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1、概念
if let是match的语法糖,用于简化匹配单个模式并忽略其他情况的场景。

2、示例:

let some_u8 = Some(0u8);
if let Some(3) = some_u8 {
println!("three"); // 仅当some_u8为Some(3)时执行
}


3、等价转换:上述代码等价于以下match表达式:
match some_u8 {
Some(3) => println!("three"),
_ => (),
}

2.2 语法结构

1
格式:if let 模式 = 表达式 { 代码块 },其中表达式结果与模式匹配时执行代码。

三 if let与match的对比

1
2
3
4
5
6
1、优势
-代码简洁:减少样板代码和缩进层级,尤其适用于仅处理单一模式的场景。
-可读性:逻辑更聚焦,避免match中大量_ => ()的冗余。

2、局限性
-失去穷尽性检查:match强制覆盖所有情况,而if let仅处理指定模式,可能遗漏其他情况。

四 if let结合else的用法

4.1 扩展语法

1
2
3
4
5
6
7
8
9
10
11
12
1、说明
if let可搭配else处理非匹配情况,等价于match的默认分支:

2、示例
enum Coin { Quarter(UsState), Penny, Nickel, Dime }
let coin = Coin::Penny;
let mut count = 0;
if let Coin::Quarter(state) = coin {
println!("State quarter from {:?}!", state);
} else {
count += 1; // 处理非Quarter情况
}

4.2 与match的等价性

1
2
3
4
5
上述代码等价于:
match coin {
Coin::Quarter(state) => println!("..."),
_ => count += 1,
}

五 参考

  • Rust中文官网——if let 简单控制流