Menu
CoddyTech

Enums numéricos con tablas

Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 56 de 80.

Aquí tienes el patrón de tabla de constantes completo. Elige un nombre de tabla en PascalCase, asigna un número explícito a cada miembro y, a partir de entonces, el código se expresa mediante nombres:

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

A diferencia de enum de TypeScript, los valores no se numeran automáticamente. Tú eliges cada valor. Empezar por 1 encaja bien con las convenciones de Lua, pero cualquier esquema sirve (también valen códigos al estilo HTTP como 200 y 404).

Los miembros resultan útiles en las comparaciones. Una función que recibe un rol puede ramificarse según las constantes con nombre en lugar de usar números sin más:

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

Observa que el parámetro tiene el tipo number: el patrón de tabla por sí solo no restringe qué números se permiten. Esa garantía es precisamente lo que añaden las uniones de literales en la siguiente lección.

challenge icon

Desafío

Fácil

Nombra tres niveles de dificultad con una tabla de constantes.

  1. Crea local Level = {Easy = 1, Normal = 2, Hard = 3}.
  2. Escribe local function describeLevel(level: number): string que devuelva "Relaxed" para Level.Easy, "Standard" para Level.Normal y, en caso contrario, "Brutal".
  3. Imprime Level.Hard y después describeLevel(Level.Normal).

Pulsa Ejecutar código: la salida muestra 3 y Standard.

Pruébalo tú mismo

-- 1) la tabla de constantes Level (Easy = 1, Normal = 2, Hard = 3)
-- 2) describeLevel(level: number): string con if/elseif/else
-- 3) imprime Level.Hard y luego describeLevel(Level.Normal)

Todas las lecciones de Introducción a Luau

Practica por tu cuenta: Compilador de Luau online