Menu
CoddyTech

匹配守卫

本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 7 课,共 78 课。

守卫会为模式添加一个条件。在模式后写上 when 和一个条件:只有当值符合模式并且条件为 true 时,模式才会匹配。守卫从 Godot 4.4 开始提供。

var hp := 15
match hp:
	0:
		print("Defeated")
	var h when h < 20:
		print("Low health: ", h)
	_:
		print("Healthy")
Low health: 15

GDScript 没有像 1..10 这样的范围模式。带守卫条件的绑定模式可以实现这个功能:var h when h < 20: 可以匹配所有小于 20 的值,并将其命名为 h。

当守卫条件为 false 时,match 会继续检查下一个模式。模式按从上到下的顺序尝试,因此顺序决定了哪个代码块会运行:

var temp := 32
match temp:
	var t when t <= 0:
		print("Freezing")
	var t when t < 15:
		print("Cold")
	var t when t < 30:
		print("Warm")
	_:
		print("Hot")
Hot

第二个模式不需要 t > 0:温度为 0 或更低时,已经匹配了第一个模式。保护条件可以使用任何条件,也可以搭配其他变量以及 and 或 or,并且适用于任何模式:5 when hard_mode: 只有在 hard_mode 为 true 时才会匹配 5。

challenge icon

挑战

简单

程序将年龄作为整数读入变量 age。使用带守卫的 match 语句打印年龄组:

  • 0 到 12:Child
  • 13 到 19:Teenager
  • 20 到 64:Adult
  • 65 到 120:Senior
  • 其他任何数字:Invalid age

每个范围都包含两端。输入 15 时,输出为:

Teenager

亲手试试

extends Node

func _ready():
	var age := int(OS.read_string_from_stdin())
	# 用 match 和守卫条件输出年龄段
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: GDScript 在线编译器