Menu
CoddyTech

Wzorce słowników

Część sekcji Logika i przepływ programu ścieżki GDScript w Coddy. Lekcja 9 z 78.

Wzorzec słownikowy zawiera klucze i wzorce, którym muszą odpowiadać ich wartości. Pasuje do słownika zawierającego dokładnie te klucze, w dowolnej kolejności:

var event := {"type": "move", "dir": "left"}
match event:
	{"type": "jump"}:
		print("Jump!")
	{"type": "move", "dir": var d}:
		print("Moving ", d)
Moving left

Wartość "type" musi wynosić "move", a wartość "dir", cokolwiek to jest, jest przechowywana w d. Słownik z kluczem, którego nie wymieniono we wzorcu, nie pasuje. Dodaj .. na końcu, aby zezwolić na dodatkowe klucze:

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

Klucz zapisany bez wartości sprawdza tylko, czy klucz istnieje: {"name", ..}: pasuje do każdego słownika, który ma klucz "name". Tutaj również działają warunki ochronne: {"type": "attack", "damage": var dmg} when dmg > 50:.

challenge icon

Wyzwanie

Łatwy

Program odczytuje zdarzenie z gry zapisane jako pary key=value oddzielone przecinkami, na przykład type=move,dir=left, i przechowuje je w słowniku event (który jest już zapisany). Wszystkie wartości są ciągami znaków.

Użyj instrukcji match ze wzorcami słowników, w następującej kolejności:

  • Dokładnie klucze type ("move") i dir: wypisz Moving i kierunek
  • Dokładnie klucze type ("attack") i damage: wypisz Taking , obrażenia i damage
  • type ma wartość "heal", a występują też dowolne inne klucze: wypisz Healing
  • Dowolny inny słownik z kluczem type: wypisz Unknown event: i typ
  • W każdym innym przypadku: wypisz Invalid event

Dla wejścia type=attack,damage=30 wynikiem jest:

Taking 30 damage

Zdarzenie takie jak type=move,dir=up,speed=2 ma dodatkowy klucz, więc wypisuje Unknown event: move.

Spróbuj swoich sił

extends Node

func _ready():
	var event := {}
	for pair in OS.read_string_from_stdin().split(","):
		var kv := pair.split("=")
		event[kv[0]] = kv[1]
	# Dopasuj event do wzorców słownikowych
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator GDScript online