Other Usage Scenarios of Patterns
Inspect one language lane at a time so line-level text and code deltas stay readable.
Diff Lane
English
0 modified sections0 code block delta0 anchor delta
Diff Lane
中文
1 modified sections0 code block delta0 anchor delta
modified其他使用模式的地方text+1 line, -1 line
v1.0.5
Section Text
1
模式除了可以在 `match` 表达式中使用外,还可以使用在变量定义和 `for in` 表达式中,例如,等号左侧是个模式,`for` 关键字和 `in` 关键字之间是个模式。同时, `if` 表达式和 `while` 表达式中的条件也可以使用模式,具体详见 [“let pattern” 的“条件”示例](../basic_programming_concepts/expression.md#涉及-let-pattern-的条件示例)。2
3
但是,并不是所有的模式都能使用在变量定义和 `for in` 表达式中,只有 `irrefutable` 的模式才能在这两处被使用,所以只有通配符模式、绑定模式、`irrefutable` tuple 模式和 `irrefutable` enum 模式是允许的。4
5
1. 变量定义和 `for in` 表达式中使用通配符模式的例子如下:6
7
<!-- verify -->8
9
```cangjie10
main() {11
let _ = 10012
for (_ in 1..5) {13
println("0")14
}15
}16
```17
18
上例中,变量定义时使用了通配符模式,表示定义了一个没有名字的变量(当然此后也就没办法对其进行访问),`for in` 表达式中使用了通配符模式,表示不会将 `1..5` 中的元素与某个变量绑定(当然循环体中就无法访问 `1..5` 中元素值)。编译执行上述代码,输出结果为:19
20
```text21
022
023
024
025
```26
27
2. 变量定义和 `for in` 表达式中使用绑定模式的例子如下:28
29
<!-- verify -->30
31
```cangjie32
main() {33
let x = 10034
println("x = ${x}")35
for (i in 1..5) {36
println(i)37
}38
}39
```40
41
上例中,变量定义中的 `x` 以及 `for in` 表达式中的 `i` 都是绑定模式。编译执行上述代码,输出结果为:42
43
```text44
x = 10045
146
247
348
449
```50
51
3. 变量定义和 `for in` 表达式中使用 `irrefutable` tuple 模式的例子如下:52
53
<!-- verify -->54
55
```cangjie56
main() {57
let (x, y) = (100, 200)58
println("x = ${x}")59
println("y = ${y}")60
for ((i, j) in [(1, 2), (3, 4), (5, 6)]) {61
println("Sum = ${i + j}")62
}63
}64
65
```66
67
上例中,变量定义时使用了 tuple 模式,表示对 `(100, 200)` 进行解构并分别和 `x` 与 `y` 进行绑定,效果上相当于定义了两个变量 `x` 和 `y`。`for in` 表达式中使用了 tuple 模式,表示依次将 `[(1, 2), (3, 4), (5, 6)]` 中的 tuple 类型的元素取出,然后解构并分别和 `i` 与 `j` 进行绑定,循环体中输出 `i + j` 的值。编译执行上述代码,输出结果为:68
69
```text70
x = 10071
y = 20072
Sum = 373
Sum = 774
Sum = 1175
```76
77
4. 变量定义和 `for in` 表达式中使用 `irrefutable` enum 模式的例子如下:78
79
<!-- verify -->80
81
```cangjie82
enum RedColor {83
Red(Int64)84
}85
main() {86
let Red(red) = Red(0)87
println("red = ${red}")88
for (Red(r) in [Red(10), Red(20), Red(30)]) {89
println("r = ${r}")90
}91
}92
```93
94
上例中,变量定义时使用了 enum 模式,表示对 `Red(0)` 进行解构并将构造器的参数值(即 `0`)与 `red` 进行绑定。`for in` 表达式中使用了 enum 模式,表示依次将 `[Red(10), Red(20), Red(30)]` 中的元素取出,然后解构并将构造器的参数值与 `r` 进行绑定,循环体中输出 `r` 的值。编译执行上述代码,输出结果为:95
96
```text97
red = 098
r = 1099
r = 20100
r = 30101
```v1.1.0
Section Text
1
模式除了可以在 `match` 表达式中使用外,还可以使用在变量定义和 `for in` 表达式中,例如,等号左侧是个模式,`for` 关键字和 `in` 关键字之间是个模式。同时,`if` 表达式和 `while` 表达式中的条件也可以使用模式,具体详见 [“let pattern” 的“条件”示例](../basic_programming_concepts/expression.md#涉及-let-pattern-的条件示例)。2
3
但是,并不是所有的模式都能使用在变量定义和 `for in` 表达式中,只有 `irrefutable` 的模式才能在这两处被使用,所以只有通配符模式、绑定模式、`irrefutable` tuple 模式和 `irrefutable` enum 模式是允许的。4
5
1. 变量定义和 `for in` 表达式中使用通配符模式的例子如下:6
7
<!-- verify -->8
9
```cangjie10
main() {11
let _ = 10012
for (_ in 1..5) {13
println("0")14
}15
}16
```17
18
上例中,变量定义时使用了通配符模式,表示定义了一个没有名字的变量(当然此后也就没办法对其进行访问),`for in` 表达式中使用了通配符模式,表示不会将 `1..5` 中的元素与某个变量绑定(当然循环体中就无法访问 `1..5` 中元素值)。编译执行上述代码,输出结果为:19
20
```text21
022
023
024
025
```26
27
2. 变量定义和 `for in` 表达式中使用绑定模式的例子如下:28
29
<!-- verify -->30
31
```cangjie32
main() {33
let x = 10034
println("x = ${x}")35
for (i in 1..5) {36
println(i)37
}38
}39
```40
41
上例中,变量定义中的 `x` 以及 `for in` 表达式中的 `i` 都是绑定模式。编译执行上述代码,输出结果为:42
43
```text44
x = 10045
146
247
348
449
```50
51
3. 变量定义和 `for in` 表达式中使用 `irrefutable` tuple 模式的例子如下:52
53
<!-- verify -->54
55
```cangjie56
main() {57
let (x, y) = (100, 200)58
println("x = ${x}")59
println("y = ${y}")60
for ((i, j) in [(1, 2), (3, 4), (5, 6)]) {61
println("Sum = ${i + j}")62
}63
}64
65
```66
67
上例中,变量定义时使用了 tuple 模式,表示对 `(100, 200)` 进行解构并分别和 `x` 与 `y` 进行绑定,效果上相当于定义了两个变量 `x` 和 `y`。`for in` 表达式中使用了 tuple 模式,表示依次将 `[(1, 2), (3, 4), (5, 6)]` 中的 tuple 类型的元素取出,然后解构并分别和 `i` 与 `j` 进行绑定,循环体中输出 `i + j` 的值。编译执行上述代码,输出结果为:68
69
```text70
x = 10071
y = 20072
Sum = 373
Sum = 774
Sum = 1175
```76
77
4. 变量定义和 `for in` 表达式中使用 `irrefutable` enum 模式的例子如下:78
79
<!-- verify -->80
81
```cangjie82
enum RedColor {83
Red(Int64)84
}85
main() {86
let Red(red) = Red(0)87
println("red = ${red}")88
for (Red(r) in [Red(10), Red(20), Red(30)]) {89
println("r = ${r}")90
}91
}92
```93
94
上例中,变量定义时使用了 enum 模式,表示对 `Red(0)` 进行解构并将构造器的参数值(即 `0`)与 `red` 进行绑定。`for in` 表达式中使用了 enum 模式,表示依次将 `[Red(10), Red(20), Red(30)]` 中的元素取出,然后解构并将构造器的参数值与 `r` 进行绑定,循环体中输出 `r` 的值。编译执行上述代码,输出结果为:95
96
```text97
red = 098
r = 1099
r = 20100
r = 30101
```