Menu
CoddyTech

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

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

challenge icon

Задание

Легко

Назови три уровня сложности с помощью таблицы констант.

  1. Создай local Level = {Easy = 1, Normal = 2, Hard = 3}.
  2. Напиши local function describeLevel(level: number): string, которая возвращает "Relaxed" для Level.Easy, "Standard" для Level.Normal, иначе "Brutal".
  3. Выведи 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

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