Menu
Coddy logo textTech

Числовые перечисления с помощью таблиц

Часть раздела Введение в 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 — сам по себе шаблон таблицы не ограничивает, какие числа разрешены. Именно эти гарантии добавляют объединения литералов в следующем уроке.

challenge icon

Задание

Легко

Создайте константную таблицу UserRole с тремя элементами:

  • Admin = 1
  • Editor = 2
  • Viewer = 3

Создайте функцию checkPermissions, которая принимает role: number и выводит:

  • Full access granted, если роль равна UserRole.Admin
  • Edit access granted, если роль равна UserRole.Editor
  • View access only в противном случае

Затем по порядку:

  1. выведите UserRole.Admin
  2. выведите UserRole.Editor
  3. выведите UserRole.Viewer
  4. вызовите checkPermissions(UserRole.Admin)
  5. вызовите checkPermissions(UserRole.Editor)
  6. вызовите checkPermissions(UserRole.Viewer)

Попробуйте сами

-- Напишите код здесь
-- 1) создайте константную таблицу UserRole (Admin=1, Editor=2, Viewer=3)
-- 2) напишите checkPermissions(role: number) с if/elseif/else
-- 3) выведите трёх членов, затем вызовите функцию для каждого
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Введение в Luau