其他使用模式的地方
模式除了可以在 match
表达式中使用外,还可以使用在变量定义(等号左侧是个模式)和 for in 表达式(for
关键字和 in
关键字之间是个模式)中。
但是,并不是所有的模式都能使用在变量定义和 for in
表达式中,只有 irrefutable
的模式才能在这两处被使用,所以只有通配符模式、绑定模式、irrefutable
tuple 模式和 irrefutable
enum 模式是允许的。
-
变量定义和
for in
表达式中使用通配符模式的例子如下:main() { let _ = 100 for (_ in 1..5) { println("0") } }
上例中,变量定义时使用了通配符模式,表示定义了一个没有名字的变量(当然此后也就没办法对其进行访问),
for in
表达式中使用了通配符模式,表示不会将1..5
中的元素与某个变量绑定(当然循环体中就无法访问1..5
中元素值)。编译执行上述代码,输出结果为:0 0 0 0
-
变量定义和
for in
表达式中使用绑定模式的例子如下:main() { let x = 100 println("x = ${x}") for (i in 1..5) { println(i) } }
上例中,变量定义中的
x
以及for in
表达式中的i
都是绑定模式。编译执行上述代码,输出结果为:x = 100 1 2 3 4
-
变量定义和
for in
表达式中使用irrefutable
tuple 模式的例子如下:main() { let (x, y) = (100, 200) println("x = ${x}") println("y = ${y}") for ((i, j) in [(1, 2), (3, 4), (5, 6)]) { println("Sum = ${i + j}") } }
上例中,变量定义时使用了 tuple 模式,表示对
(100, 200)
进行解构并分别和x
与y
进行绑定,效果上相当于定义了两个变量x
和y
。for in
表达式中使用了 tuple 模式,表示依次将[(1, 2), (3, 4), (5, 6)]
中的 tuple 类型的元素取出,然后解构并分别和i
与j
进行绑定,循环体中输出i + j
的值。编译执行上述代码,输出结果为:x = 100 y = 200 Sum = 3 Sum = 7 Sum = 11
-
变量定义和
for in
表达式中使用irrefutable
enum 模式的例子如下:enum RedColor { Red(Int64) } main() { let Red(red) = Red(0) println("red = ${red}") for (Red(r) in [Red(10), Red(20), Red(30)]) { println("r = ${r}") } }
上例中,变量定义时使用了 enum 模式,表示对
Red(0)
进行解构并将构造器的参数值(即0
)与red
进行绑定。for in
表达式中使用了 enum 模式,表示依次将[Red(10), Red(20), Red(30)]
中的元素取出,然后解构并将构造器的参数值与r
进行绑定,循环体中输出r
的值。编译执行上述代码,输出结果为:red = 0 r = 10 r = 20 r = 30