Menu
CoddyTech

Сопоставление с переменными

Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 6 из 78.

В уроке Оператор match каждый шаблон был литеральным значением, например 1: или "bow":. Шаблоном также может быть константа или переменная: match сравнивает значение с тем, что хранится в этом имени в момент выполнения строки:

const SECRET := 42
var guess := 42
match guess:
	SECRET:
		print("You found it!")
	_:
		print("Try again")
You found it!

Второй новый шаблон — это шаблон связывания: var, за которым следует новое имя. Как и _, он соответствует любому значению, а также сохраняет это значение в новой переменной, которую можно использовать внутри её блока:

var level := 5
match level:
	1:
		print("Tutorial")
	var n:
		print("Level %d is locked" % n)
Level 5 is locked

Шаблон связывания наиболее полезен, когда вы сопоставляете результат выражения, у которого нет собственного имени:

var roll_a := 4
var roll_b := 6
match roll_a + roll_b:
	12:
		print("Double six!")
	var total:
		print("You rolled ", total)
You rolled 10

Шаблон связывания соответствует чему угодно, поэтому он идет последним, как _. Его имя должно быть новым: var level: во втором примере было бы ошибкой, потому что level уже существует. Он также не может находиться в одной строке с другими шаблонами, разделенными запятыми.

match строго сравнивает типы: строка "5" не соответствует шаблону 5, как и число с плавающей точкой 5.0. Преобразуй текст, считанный из ввода, с помощью int(), прежде чем сравнивать его с числами.

challenge icon

Задание

Легко

Напиши проверку для угадывания числа. Константа SECRET хранит секретное число, а программа считывает догадку игрока как целое число в guess.

Напиши оператор match для guess с тремя шаблонами:

  • Константа SECRET: выведи Correct!
  • 0: выведи You gave up.
  • Шаблон связывания для любой другой догадки: выведи догадку, а затем is not the number.

Для ввода 17 вывод будет таким:

17 is not the number.

Попробуйте сами

extends Node

func _ready():
	const SECRET := 42
	var guess := int(OS.read_string_from_stdin())
	# Напишите оператор match ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и потоки выполнения

Потренируйтесь самостоятельно: Онлайн-компилятор GDScript