Menu
CoddyTech

字典模式

本课属于 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:。

challenge icon

挑战

简单

程序会读取一个用逗号分隔的 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
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: GDScript 在线编译器