Enums в match
Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 40 из 78.
Инструкция match может сравнивать значение с вариантами перечисления. Каждый шаблон — это вариант, записанный с именем перечисления:
enum Light { RED, YELLOW, GREEN }
func _ready():
var light := Light.YELLOW
match light:
Light.RED:
print("Stop")
Light.YELLOW:
print("Slow down")
Light.GREEN:
print("Go")Это выводит Slow down. Как и в любом match, несколько вариантов могут относиться к одной ветке и разделяться запятыми, а _ перехватывает всё остальное:
match light:
Light.RED, Light.YELLOW:
print("Wait")
_:
print("Go")Функция, которая возвращает значение, должна содержать return на каждом пути выполнения. Даже если ветви охватывают все варианты, GDScript сообщает Not all code paths return a value, если в match нет ветви _ или после него нет return:
func next_light(light: Light) -> Light:
match light:
Light.RED:
return Light.GREEN
Light.GREEN:
return Light.YELLOW
_:
return Light.REDПараметр и возвращаемый тип — это перечисление Light. Функция объявлена на верхнем уровне, как и перечисление.
Задание
ЛегкоСкрипт объявляет перечисление State с вариантами IDLE, WALK, RUN, JUMP и FALL. Завершите функцию describe(): она получает состояние и возвращает его описание, выбранное с помощью match:
State.IDLE:"Standing still"State.WALKиState.RUN:"Moving"State.JUMPиState.FALL:"In the air"
Используйте одну ветвь для WALK и RUN и одну для JUMP и FALL. Данный код в _ready() считывает строку с именами состояний и выводит каждое из них вместе с описанием. Для входных данных IDLE RUN FALL вывод будет таким:
IDLE: Standing still
RUN: Moving
FALL: In the airПопробуйте сами
extends Node
enum State { IDLE, WALK, RUN, JUMP, FALL }
func describe(state: State):
# Верните описание состояния с помощью match
pass
func _ready():
var names := OS.read_string_from_stdin().split(" ", false)
for state_name in names:
print(state_name, ": ", describe(State[state_name]))
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки: углублённое изучение
Методы строкПоиск в строкахЗамена и обрезка пробеловРазделение и объединениеПовторение — проверка имени пользователя4Словари. Часть 2
Вложенные словариМассивы словарейОбъединение словарейКопирование словарейПовторение — подсчёт частоты10Продвинутые функции
Возврат нескольких значенийЛямбда-функции. Часть 1Лямбда-функции. Часть 2Повторение — сортировка с помощью лямбда-функцииРекурсивные функции. Часть 1Рекурсивные функции. Часть 2Повторение — сумма вложенного массива13Система управления запасами
Обзор проектаДобавление товара2Продвинутое управление ветвлением
Сопоставление с переменнымиУсловия в шаблонахШаблоны массивовШаблоны словарейПроверка принадлежностиИтоги — парсер команд5Приложение «Телефонная книга»
Показать менюДобавить контакт8Менеджер успеваемости студентов
Обзор проектаДобавить студента3Многомерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваВложенные циклы с двумерными массивамиПовторение: двумерные массивыРваные массивыТипичные шаблоны работы с двумерными массивамиПовторение: игровое поле6Множества и словари
Что такое множество?Словарь как множествоДобавление и удалениеОбъединение и пересечениеРазность множествПовторение — удаление дубликатовПотренируйтесь самостоятельно: Онлайн-компилятор GDScript