## 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)