仓颉编程_没有switch_case需使用match_case
支持两种 match 表达式,一种是包含待匹配值的 match 表达式,另一种是不含待匹配值的 match 表达式。
含有匹配值的 match 表达式
main()
{let a = 'Hello World!'//不可变量var a2 = ''var b = 77 //可变变量match(b){case 77 => a2 = 'a77'println(a2)case 78 => a2 = 'a78'println(a2)case _ => a2= '' //缺少此句会报错}}
match 表达式要求所有匹配必须是穷尽(exhaustive)的,意味着待匹配表达式的所有可能取值都应该被考虑到。当 match 表达式非穷尽,或者编译器判断不出是否穷尽时,均会编译报错non-exhaustive patterns,换言之,所有 case 分支(包含 pattern guard)所覆盖的取值范围的并集,应该包含待匹配表达式的所有可能取值。常用的确保 match 表达式穷尽的方式是在最后一个 case 分支中使用通配符模式 _,因为 _ 可以匹配任意值
不含匹配值的 match 表达式:
与包含待匹配值的 match 表达式相比,关键字 match 之后并没有待匹配的表达式,并且 case 之后不再是 pattern,而是类型为 Bool 的表达式(上述代码中的 x2 > 0 和 x2 < 0)或者 _(表示 true),当然,case 中也不再有 pattern guard。
无匹配值的 match 表达式执行时依次判断 case 之后的表达式的值,直到遇到值为 true 的 case 分支;一旦某个 case 之后的表达式值等于 true,则执行此 case 中 => 之后的代码,然后退出 match 表达式的执行(意味着不会再去判断该 case 之后的其他 case)
交流咨询请留言邮箱