Числовые перечисления с помощью таблиц
Часть раздела Введение в Luau путешествия по Lua на Coddy — урок 52 из 73.
Давайте правильно построим шаблон таблицы констант. Выберите имя таблицы в 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 — сам по себе шаблон таблицы не ограничивает, какие числа разрешены. Именно эти гарантии добавляют объединения литералов в следующем уроке.
Задание
ЛегкоСоздайте константную таблицу UserRole с тремя элементами:
Admin=1Editor=2Viewer=3
Создайте функцию checkPermissions, которая принимает role: number и выводит:
Full access granted, если роль равнаUserRole.AdminEdit access granted, если роль равнаUserRole.EditorView access onlyв противном случае
Затем по порядку:
- выведите
UserRole.Admin - выведите
UserRole.Editor - выведите
UserRole.Viewer - вызовите
checkPermissions(UserRole.Admin) - вызовите
checkPermissions(UserRole.Editor) - вызовите
checkPermissions(UserRole.Viewer)
Попробуйте сами
-- Напишите код здесь
-- 1) создайте константную таблицу UserRole (Admin=1, Editor=2, Viewer=3)
-- 2) напишите checkPermissions(role: number) с if/elseif/else
-- 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-словари