Menu
Coddy logo textTech

Enums numéricos con tablas

Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 52 de 73.

Construyamos correctamente el patrón de tabla de constantes. Elige un nombre de tabla en PascalCase, asigna a cada miembro un número explícito y, a partir de entonces, el código hablará en nombres:

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

A diferencia del enum de TypeScript, nada se numera automáticamente. Tú eliges cada valor. Empezar desde 1 encaja muy bien con las convenciones de Lua, pero cualquier esquema funciona (los códigos al estilo HTTP, como 200 y 404, también son válidos).

Los miembros destacan en las comparaciones. Una función que recibe un rol puede ramificar según las constantes con nombre en lugar de usar números sin significado:

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 están permitidos. Esa garantía es precisamente lo que añaden las uniones literales en la siguiente lección.

challenge icon

Desafío

Fácil

Crea una tabla constante llamada UserRole con tres miembros:

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

Crea una función checkPermissions que reciba role: number e imprima:

  • Full access granted si el rol es UserRole.Admin
  • Edit access granted si el rol es UserRole.Editor
  • View access only en caso contrario

Después, en orden:

  1. imprime UserRole.Admin
  2. imprime UserRole.Editor
  3. imprime UserRole.Viewer
  4. llama a checkPermissions(UserRole.Admin)
  5. llama a checkPermissions(UserRole.Editor)
  6. llama a checkPermissions(UserRole.Viewer)

Pruébalo tú mismo

-- Escribe código aquí
-- 1) crea la tabla constante UserRole (Admin=1, Editor=2, Viewer=3)
-- 2) escribe checkPermissions(role: number) con if/elseif/else
-- 3) imprime los tres miembros, luego llama a la función para cada uno
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Introducción a Luau

Practica por tu cuenta: Compilador de Lua online