Строковые перечисления как объединения
Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 53 из 73.
Числа делают логи загадочными: увидев 2, вы мало что поймёте, а увидев "down" — всё. Для удобочитаемых перечислений в Luau есть literal объединения типов: тип, члены которого являются точными строками:
type Direction = "up" | "down" | "left" | "right"
local facing: Direction = "up" -- ✓
local typo: Direction = "upp" -- ✗ ошибка типа при редактированииПеременная, аннотированная с помощью Direction, может содержать эти four строки и ничего больше. Допустите опечатку — и проверяющий немедленно её обнаружит: ошибка никогда не дойдёт до player.
Во время runtime значения являются plain strings. Выводите их, объединяйте, сравнивайте с помощью ==. Всё, что вы знаете о strings, применимо и здесь:
print(facing) -- вверх
print(`facing {facing}`) -- лицом вверхСравните два имеющихся у вас шаблона: постоянная таблица create одно значение runtime (UserRole), содержащее members, тогда как literal объединение не создаёт вообще никакого значения. Таблицы Direction не существует — есть только правило, которое проверяющий применяет к подходящим строкам. Описательные, самодокументируемые значения с нулевой стоимостью во время runtime делают literal объединения предпочтительным стилем enum в коде Luau.
Задание
ЛегкоСоздай тип объединения литералов с именем Direction и членами "up", "down", "left" и "right".
Создай четыре переменные, каждую с аннотацией Direction:
upDirection="up"downDirection="down"leftDirection="left"rightDirection="right"
Выведи каждое значение в отдельной строке:
upDirectiondownDirectionleftDirectionrightDirection- сообщение
The player moves left, составленное с помощью интерполяции строк изleftDirection
Попробуйте сами
-- Напишите код здесь
-- 1) определите тип Direction как объединение четырёх строковых литералов
-- 2) создайте четыре аннотированные переменные
-- 3) выведите каждую, затем интерполированное сообщение
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в Luau
1Начало работы с Luau
Что такое Luau?Почему именно Luau?Ваш первый код на LuauПроверка типов и режимы ошибокИтоги: Введение в Luau4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация анонимных функцийФункции, ничего не возвращающиеНеобязательные параметрыЗначения параметров по умолчаниюФункции с переменным числом аргументовОпределение типов функцийИтоги: типизированные функции2Базовые типы
Основные типы: num, str, boolТип 'any': лазейка в типизацииТип 'unknown'Nil и опциональные типыВывод типов на практикеЯвные аннотации типовИтоги: практика по базовым типам5Псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения (Union)Работа с типами объединенияЛитеральные типыТипы пересечения (Intersection)Комбинирование псевдонимов типовИтоги: Сложные комбинации типов8Перечисления в стиле Luau
Паттерн перечислений (Enum) в LuauЧисловые перечисления с помощью таблицСтроковые перечисления как объединенияИспользование перечислений на основе литеральных объединенийЗамораживание константных таблицИтоги: Перечисления в стиле Luau3Типизированные таблицы: Массивы и Map-словари
Типизированные массивыДобавление и чтение элементовЧто такое тип Map?Объявление и доступ к Map-словарямИтерация по таблицамТаблицы смешанной формыМногомерные типизированные массивыtable.unpack и VarargsИтоги: Массивы и Map-словариПотренируйтесь самостоятельно: Онлайн-компилятор Lua