Числовые перечисления с помощью таблиц
Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 56 из 80.
Вот полный вариант шаблона таблицы констант. Выбери имя таблицы в PascalCase, задай каждому члену явное число, и с этого момента код будет использовать имена:
local UserRole = {
Admin = 1,
Editor = 2,
Viewer = 3,
}В отличие от enum в TypeScript, значения не нумеруются автоматически. Ты выбираешь каждое значение. Начать с 1 хорошо соответствует соглашениям Lua, но подойдёт любая схема (например, коды в стиле HTTP, такие как 200 и 404).
Члены таблицы особенно полезны в сравнениях. Функция, получающая роль, может выбирать ветвь по именованным константам, а не по отдельным числам:
local function checkPermissions(role: number)
if role == UserRole.Admin then
print("Full access granted")
elseif role == UserRole.Editor then
print("Edit access granted")
else
print("View access only")
end
endОбрати внимание: параметр имеет тип number, то есть один лишь шаблон с таблицей не ограничивает допустимые числа. Именно такую гарантию дают литеральные объединения, которые рассматриваются в следующем уроке.
Задание
ЛегкоНазови три уровня сложности с помощью таблицы констант.
- Создай
local Level = {Easy = 1, Normal = 2, Hard = 3}. - Напиши
local function describeLevel(level: number): string, которая возвращает"Relaxed"дляLevel.Easy,"Standard"дляLevel.Normal, иначе"Brutal". - Выведи
Level.Hard, затемdescribeLevel(Level.Normal).
Нажми Run Code: в выводе отображаются 3 и Standard.
Попробуйте сами
-- 1) таблица констант Level (Easy = 1, Normal = 2, Hard = 3)
-- 2) describeLevel(level: number): string с if/elseif/else
-- 3) вывести Level.Hard, затем describeLevel(Level.Normal)
Все уроки раздела Введение в Luau
1Начало работы с Luau
Что такое Luau?Почему именно Luau?Ваш первый код на LuauПроверка типов и режимы ошибокИтоги: Введение в Luau4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация анонимных функцийФункции без возвращаемого значенияНеобязательные параметрыЗначения параметров по умолчаниюЗначения по умолчанию для булевых параметровФункции с переменным числом аргументовОпределение типов функцийПовторение: типизированные функции2Основные типы
Число, строка и булево значениеТип 'any': запасной выходТип 'unknown'Nil и опциональные типыВывод типов на практикеЯвные аннотации типовПовторение: практика с основными типами5Псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения (Union)Работа с типами объединенияЛитеральные типыТипы пересечения (Intersection)Комбинирование псевдонимов типовИтоги: Сложные комбинации типов8Перечисления в стиле Luau
Паттерн перечислений (Enum) в LuauЧисловые перечисления с помощью таблицСтроковые перечисления как объединенияИспользование перечислений на основе литеральных объединенийЗамораживание константных таблицИтоги: Перечисления в стиле Luau3Типизированные таблицы: массивы и отображения
Типизированные массивыДобавление и чтение элементовЧто такое тип отображения?Объявление и доступ к отображениямПеребор таблицТаблицы смешанной структурыЧтение сеткиСоздание сеткиtable.unpackПовторение: массивы и отображенияПотренируйтесь самостоятельно: Онлайн-компилятор Luau