Menu
Coddy logo textTech

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

Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 52 из 73.

Давайте правильно реализуем шаблон constant-table. Выберите имя table в PascalCase, задайте каждому элементу (members) явное число, и после этого код будет обращаться к именам:

local UserRole = {
    Admin = 1,
    Editor = 2,
    Viewer = 3,
}

В отличие от TypeScript enum, автоматической нумерации нет. Вы выбираете каждое значение. Начало с 1 хорошо соответствует соглашениям Lua, но подойдёт любая схема (коды в стиле HTTP, например 200 и 404, тоже подходят).

members особенно удобны при сравнениях. function, получающая role, может выполнять ветвление по именованным constants вместо отдельных numbers:

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: сам шаблон table не ограничивает допустимые numbers. Именно такую гарантию добавляют literal unions в следующем уроке.

challenge icon

Задание

Легко

Создай constant table named UserRole с three members:

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

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

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

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

  1. print UserRole.Admin
  2. print UserRole.Editor
  3. print UserRole.Viewer
  4. call checkPermissions(UserRole.Admin)
  5. call checkPermissions(UserRole.Editor)
  6. call checkPermissions(UserRole.Viewer)

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

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

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор Lua