Menu
CoddyTech

Шаблоны словарей

Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 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: и значение ключа type
  • Всё остальное: выведи 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