Menu
CoddyTech

Mẫu từ điển

Thuộc phần Logic và luồng chương trình trong hành trình GDScript của Coddy. Bài học 9 trên 78.

Mẫu từ điển liệt kê các khóa và mẫu mà giá trị của chúng phải khớp. Mẫu này khớp với một từ điển có chính xác những khóa đó, theo thứ tự bất kỳ:

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

Giá trị của "type" phải là "move", còn giá trị của "dir", bất kể đó là gì, được lưu trong d. Một từ điển có khóa không được liệt kê trong mẫu sẽ không khớp. Thêm .. vào cuối để cho phép có thêm khóa:

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

Khóa được viết mà không có giá trị chỉ kiểm tra xem khóa có tồn tại hay không: {"name", ..}: khớp với mọi từ điển có khóa "name". Các điều kiện bảo vệ cũng hoạt động ở đây: {"type": "attack", "damage": var dmg} when dmg > 50:.

challenge icon

Thử thách

Dễ

Chương trình đọc một sự kiện trong trò chơi được viết dưới dạng các cặp key=value ngăn cách bằng dấu phẩy, chẳng hạn như type=move,dir=left, rồi lưu sự kiện đó vào từ điển event (đã viết sẵn). Tất cả giá trị đều là chuỗi.

Dùng câu lệnh match với các mẫu từ điển theo thứ tự sau:

  • Chính xác các khóa type ("move") và dir: in ra Moving và hướng di chuyển
  • Chính xác các khóa type ("attack") và damage: in ra Taking , lượng sát thương và damage
  • type là "heal", kèm theo các khóa bất kỳ khác: in ra Healing
  • Bất kỳ từ điển nào khác có khóa type: in ra Unknown event: và giá trị của type
  • Mọi trường hợp khác: in ra Invalid event

Với đầu vào type=attack,damage=30, đầu ra là:

Taking 30 damage

Một sự kiện như type=move,dir=up,speed=2 có thêm một khóa, nên chương trình in ra Unknown event: move.

Tự làm thử

extends Node

func _ready():
	var event := {}
	for pair in OS.read_string_from_stdin().split(","):
		var kv := pair.split("=")
		event[kv[0]] = kv[1]
	# Đối chiếu event với các mẫu từ điển
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch GDScript online