字典模式
本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 9 课,共 78 课。
字典模式会列出键以及其值必须匹配的模式。它会匹配一个恰好包含这些键的字典,顺序不限:
var event := {"type": "move", "dir": "left"}
match event:
{"type": "jump"}:
print("Jump!")
{"type": "move", "dir": var d}:
print("Moving ", d)Moving left"type" 的值必须是 "move",而 "dir" 的值无论是什么,都会存储在 d 中。带有模式中未列出的键的字典不会匹配。在末尾添加 ..,即可允许存在额外的键:
var hit := {"type": "attack", "damage": 30, "crit": true}
match hit:
{"type": "attack", "damage": _}:
print("Exactly two keys")
{"type": "attack", "damage": var dmg, ..}:
print("Hit for ", dmg)Hit for 30只写出键而不写值,只会检查该键是否存在:{"name", ..}: 可以匹配任何包含 "name" 键的字典。这里也可以使用守卫条件:{"type": "attack", "damage": var dmg} when dmg > 50:。
挑战
简单程序会读取一个用逗号分隔的 key=value 键值对形式的游戏事件,例如 type=move,dir=left,并将其存储在字典 event 中(已写好)。所有值都是字符串。
使用 match 语句和字典模式,并按以下顺序匹配:
- 键恰好为
type("move")和dir:打印Moving和方向 - 键恰好为
type("attack")和damage:打印Taking、伤害值和damage type为"heal",且可以有其他键:打印Healing- 任何包含
type键的其他字典:打印Unknown event:和类型 - 其他任何情况:打印
Invalid event
对于输入 type=attack,damage=30,输出为:
Taking 30 damage像 type=move,dir=up,speed=2 这样的事件包含一个额外的键,因此会打印 Unknown event: move。
亲手试试
extends Node
func _ready():
var event := {}
for pair in OS.read_string_from_stdin().split(","):
var kv := pair.split("=")
event[kv[0]] = kv[1]
# 用字典模式匹配 event
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器