You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
2.6 KiB

## if-let
if let 语法允许你将 if 和 let 组合成一种简洁的方式,用于处理与一个模式匹配的值,同时忽略其余的值。
```rust
if let pattern = value {
// code block
} else {
// code block
}
```
![image-20230109150811762](C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230109150811762.png)
### 使用match
![image-20230109150359124](C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230109150359124.png)
### 使用if-let
if let 语法使用模式和表达式,用**等号**隔开。它的工作方式与 **match** 相同,其中表达式给定给 match,模式是它的第一个臂。在这种情况下,模式是 Some(max),max 绑定到 Some 内部的值。然后我们可以在 if let 块的主体中像在相应的 match 臂中一样使用 max。如果值不匹配模式,则不会运行 if let 块中的代码。
使用 if let 意味着打的字比较少,缩进次数比较少,所需的代码也比较少。但是,你会失去 match 强制执行的**详尽检查**。选择 match 和 if let 取决于你在特定情况下正在进行的操作,以及是否放弃详尽检查以获得简洁性是否合适。
换句话说,你可以把 if let 看作是 match 的**语法糖**,当值与一个模式匹配时运行代码忽略所有其他值。if let 语法也可以有一个 else 分句。
![image-20230109150636791](C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230109150636791.png)
### if let - else
match 写法
![image-20230109153859735](C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230109153859735.png)
if let -else写法
![image-20230109154333707](C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230109154333707.png)
### 通用臂
1. match 语句中,_ 总可以替代 None
2. 使用变量名作为通用臂的好处是,你可以在代码块中使用这个变量,比使用 _ 更加灵活。但是,使用变量名作为通用臂时,要注意,通用臂必须放在所有其他臂的最后,因为它是最后一个匹配的,如果放在前面,则永远不会执行其他臂。
### if let … else if let … else
```rust
if let pattern_1 = value_1 {
// code block 1
} else if let pattern_2 = value_2 {
// code block 2
} else {
// code block 3
}
```
如果 pattern_1 与 value_1 匹配成功,则执行代码块 1;如果 pattern_1 匹配失败,但 pattern_2 与 value_2 匹配成功,则执行代码块 2;如果所有条件都不成立,则执行代码块 3。
![image-20230109155041676](C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230109155041676.png)