rust的模式匹配大概有以下几种
let语句
if let 语句
match 语句
参数的语法:
-
| 表示可以并列多个选项
-
范围模式,可以使用 … = 列出范围,如1…=10 表示范围【1,10】;如1…10 表示【1,10),该模式for循环支持
-
通过@ 绑定变量
-
匹配守卫添加额外的条件
match 分支后面有一个if 条件,它必须满足该条件才选择该分支
-
通过_匹配忽略值,类似于 c中switch 语句中的 default
代码中表现形式match v{ Some(x)=>.. _=>.. }
-
while let 语句
注:模式匹配仅支持char和数值,在 => 后如果执行的语句不止一条时,需要添加{}
Match 语句的exhaustive 特性
Match 语句存在一个 exhaustive 特性,也就是match要求穷尽value的所有pattern
Fn plus_on(x:Option<32>) -> Option<I32>
当你不想穷尽所有的pattern 时,用_代替其他的pattern,当你只想匹配一种pattern 时,rust 提供了一种语法 if let
,可参考上诉例子。
if let 与 if 的区别
if let 执行后续的表达式的条件是match,而if 执行的条件是true