匹配守卫
本课属于 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: 15GDScript 没有像 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。
挑战
简单程序将年龄作为整数读入变量 age。使用带守卫的 match 语句打印年龄组:
0到12:Child13到19:Teenager20到64:Adult65到120:Senior- 其他任何数字:
Invalid age
每个范围都包含两端。输入 15 时,输出为:
Teenager亲手试试
extends Node
func _ready():
var age := int(OS.read_string_from_stdin())
# 用 match 和守卫条件输出年龄段
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器