数组模式
本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 8 课,共 78 课。
数组模式的写法类似数组字面量。它会匹配大小相同、且元素逐一匹配的数组。模式中的每个元素都可以是字面量、_ 或绑定:
var point := [0, 7]
match point:
[0, 0]:
print("Origin")
[0, var y]:
print("On the y-axis at ", y)
[var x, var y]:
print("Point ", x, ", ", y)On the y-axis at 7大小必须相同:[var x, var y] 与 [1, 2, 3] 不匹配。将 .. 放在最后一个元素的位置,就可以允许任意数量的额外元素(包括零个);空数组则写作 []:
var cmd := ["give", "sword", "Ana"]
match cmd:
[]:
print("Nothing typed")
["give", var item, ..]:
print("Giving ", item)Giving sword守卫也适用于数组模式:[var a, var b] when a == b: 可以匹配两个相等的元素。
数组模式只匹配 Array 类型。split() 返回的 PackedStringArray 永远不会匹配数组模式。将结果存储在声明为 Array 的变量中,这样就会进行转换:
var words: Array = "go north".split(" ")
match words:
["go", var dir]:
print("Heading ", dir)Heading north挑战
简单程序会读取一个写成 x,y 的点,并将它存入数组 point 中,作为两个整数(已写好)。使用带数组模式的 match 语句,按照第一个匹配的规则,打印点的位置:
- 两个值都是
0:Origin x是0:On the y-axis at y=后接yy是0:On the x-axis at x=后接xx和y相等:On the diagonal at后接这个值- 其他情况:输出
Point at (x, y),并附上这两个值
输入 0,5 时,输出为:
On the y-axis at y=5输入 2,7 时,输出为:
Point at (2, 7)亲手试试
extends Node
func _ready():
var parts := OS.read_string_from_stdin().split(",")
var point := [int(parts[0]), int(parts[1])]
# 用数组模式匹配 point
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器