Match 文
介绍
match 语句是将值与多个模式进行比较以执行分支的控制语句。
比起 if / else if 链式语句,使用 match 可以更清晰地表达分支意图。
当前 Wave 的 match 是 语句,不支持直接求值的表达式形式。
即,var x = match (...) { ... } 这样的形式是不能使用的。
基本语法
match (value) {
pattern1 => {
// 执行块
}
pattern2 => {
// 执行块
}
_ => {
// 默认块
}
}
语法规则:
- 头部使用
match (expr)形式。 - 每个 arm 使用
{ ... }的形式。 - arm 的正文必须是
{ ... }块。 - arm 之间可以只用换行,也可以用
,或;作为分隔符。
模式类型
当前支持的模式有以下三种。
- 整数字面量模式
0 => { ... }
1 => { ... }
42 => { ... }
- 标识符 模式
Off => { ... }
On => { ... }
标识符模式用于可被解释为 整数常量 的值,例如 enum variant。
- 通配符模式 (
_)
_ => { ... }
这是当没有其他模式匹配时执行的默认 arm。
匹配对象类型
根据当前实现,match 的匹配目标值必须是 整数系列/枚举系列。
字符串、浮点数、结构体等不能作为 match 的目标。
例子 1:整数分支
fun classify_num(v: i32) -> i32 {
var result: i32 = -1;
match (v) {
0 => {
result = 10;
}
1 => {
result = 20;
}
_ => {
result = 99;
}
}
return result;
}
