4.3 `match` 表达式
03-
match 表达式 — Comprehensive Rust2 分钟阅读
译文 · 基于 Comprehensive Rust
原文链接: https://google.github.io/comprehensive-rust/control-flow-basics/match.html
4.3 match 表达式
match 可用于将一个值与一个或多个选项进行匹配:
| |
与 if 表达式类似,match 也可以返回值:
| |
match分支从上到下求值,第一个匹配成功的分支会执行对应的主体。分支之间不会像其他语言中的
switch那样发生 fall-through(贯穿)。
match分支的主体可以是单个表达式,也可以是一个块。严格来说两者相同,因为块也是表达式,但学员此时可能还不完全理解这种对称性。
match表达式必须是穷尽的(exhaustive),即要么覆盖所有可能的值,要么提供像_这样的默认分支。穷尽性用枚举最容易演示,但此时尚未介绍枚举。因此我们改用匹配bool——最简单的原始类型——来演示。本页引入
match时不讨论模式匹配(pattern matching),让学员先熟悉语法,而不一次塞入过多信息。模式匹配明天会更详细地讲,这里尽量不要展开太多。扩展阅读
为了进一步说明为何使用
match,可以把示例与用if写出的等价写法对比。第二种匹配bool的情况中,if {} else {}与match相当接近。但在第一种检查多个分支的例子中,match通常比if {} else if {} else if {} else更简洁。
match还支持匹配守卫(match guards),可添加任意逻辑条件来决定是否进入该分支。但讲匹配守卫需要先解释模式匹配,而本页刻意避免这一点。