Строковые перечисления как объединения
Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 57 из 80.
Числа делают журналы загадочными: увидев 2, вы мало что поймёте, а увидев "down" — поймёте всё. Для понятных перечислений в Luau есть литеральные объединённые типы: тип, членами которого являются точные строки:
type Direction = "up" | "down" | "left" | "right"
local facing: Direction = "up" -- ✓
local typo: Direction = "upp" -- ✗ ошибка типа при редактированииПеременная, аннотированная типом Direction, может содержать эти четыре строки и ничего больше. Допустите опечатку — и проверяющий сразу её обнаружит: ошибка никогда не попадёт к игроку.
Во время выполнения эти значения являются обычными строками. Выводите их, объединяйте, сравнивайте с помощью ==. К ним применимо всё, что вы знаете о строках:
print(facing) -- up
print(`facing {facing}`) -- facing upСравните два доступных вам теперь шаблона: таблица констант создаёт одно значение во время выполнения (UserRole), содержащее члены, а литеральное объединение вообще не создаёт значения. Таблицы Direction нет — есть только правило, которое проверяющий применяет к подходящим строкам. Описательные, понятные без пояснений значения, не требующие затрат во время выполнения, делают литеральные объединения предпочтительным стилем перечислений в коде Luau.
Задание
ЛегкоСохраните направление, которое может иметь только одно из четырёх значений.
- Напишите
type Direction = "up" | "down" | "left" | "right". - Объявите
local facing: Direction = "left". - Выведите
facing, затем`The player moves {facing}`.
Нажмите Run Code: в выводе отображаются left и The player moves left.
Попробуйте сами
-- 1) задайте тип Direction как объединение четырёх строк
-- 2) локальная переменная facing: Direction = "left"
-- 3) выведите facing, затем предложение
Все уроки раздела Введение в Luau
1Начало работы с Luau
Что такое Luau?Почему именно Luau?Ваш первый код на LuauПроверка типов и режимы ошибокИтоги: Введение в Luau4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация анонимных функцийФункции без возвращаемого значенияНеобязательные параметрыЗначения параметров по умолчаниюЗначения по умолчанию для булевых параметровФункции с переменным числом аргументовОпределение типов функцийПовторение: типизированные функции2Основные типы
Число, строка и булево значениеТип 'any': запасной выходТип 'unknown'Nil и опциональные типыВывод типов на практикеЯвные аннотации типовПовторение: практика с основными типами5Псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения (Union)Работа с типами объединенияЛитеральные типыТипы пересечения (Intersection)Комбинирование псевдонимов типовИтоги: Сложные комбинации типов8Перечисления в стиле Luau
Паттерн перечислений (Enum) в LuauЧисловые перечисления с помощью таблицСтроковые перечисления как объединенияИспользование перечислений на основе литеральных объединенийЗамораживание константных таблицИтоги: Перечисления в стиле Luau3Типизированные таблицы: массивы и отображения
Типизированные массивыДобавление и чтение элементовЧто такое тип отображения?Объявление и доступ к отображениямПеребор таблицТаблицы смешанной структурыЧтение сеткиСоздание сеткиtable.unpackПовторение: массивы и отображенияПотренируйтесь самостоятельно: Онлайн-компилятор Luau