Menu
CoddyTech

Шаблоны массивов

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

Шаблон массива записывается как литерал массива. Он сопоставляется с массивом того же размера, элементы которого сопоставляются по одному. Каждый элемент шаблона может быть литералом, _ или привязкой:

var point := [0, 7]
match point:
	[0, 0]:
		print("Origin")
	[0, var y]:
		print("On the y-axis at ", y)
	[var x, var y]:
		print("Point ", x, ", ", y)
On the y-axis at 7

Размер должен совпадать: [var x, var y] не соответствует [1, 2, 3]. Помести .. последним элементом, чтобы разрешить любое количество дополнительных элементов (в том числе ноль), а для пустого массива напиши []:

var cmd := ["give", "sword", "Ana"]
match cmd:
	[]:
		print("Nothing typed")
	["give", var item, ..]:
		print("Giving ", item)
Giving sword

Защитные условия работают и с шаблонами массивов: [var a, var b] when a == b: соответствует двум одинаковым элементам.

Шаблоны массивов соответствуют только типу Array. Возвращаемый split() тип PackedStringArray им никогда не соответствует. Сохрани результат в переменной, объявленной как Array, что преобразует его:

var words: Array = "go north".split(" ")
match words:
	["go", var dir]:
		print("Heading ", dir)
Heading north
challenge icon

Задание

Легко

Программа считывает точку, записанную в виде x,y, и сохраняет её в массиве point как два целых числа (это уже написано). Используй оператор match с шаблонами массивов, чтобы вывести, где находится точка, применяя первое подходящее правило:

  • Оба значения равны 0: Origin
  • x равен 0: On the y-axis at y=, за которым следует y
  • y равен 0: On the x-axis at x=, за которым следует x
  • x и y равны: On the diagonal at , за которым следует значение
  • В любом другом случае: Point at (x, y) с двумя значениями

Для входных данных 0,5 результат будет таким:

On the y-axis at y=5

Для входных данных 2,7 результат будет таким:

Point at (2, 7)

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

extends Node

func _ready():
	var parts := OS.read_string_from_stdin().split(",")
	var point := [int(parts[0]), int(parts[1])]
	# Сопоставить point с шаблонами массивов
quiz iconПроверьте себя

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

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

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