Menu
CoddyTech

数组模式

本课属于 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
challenge icon

挑战

简单

程序会读取一个写成 x,y 的点,并将它存入数组 point 中,作为两个整数(已写好)。使用带数组模式的 match 语句,按照第一个匹配的规则,打印点的位置:

  • 两个值都是 0:Origin
  • x 是 0:On the y-axis at y= 后接 y
  • y 是 0:On the x-axis at x= 后接 x
  • x 和 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
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: GDScript 在线编译器