其他使用模式的地方
模式除了可以在 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表达式中使用irrefutabletuple 模式的例子如下:__
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表达式中使用irrefutableenum 模式的例子如下:__
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