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.
Vamos a construir el patrón de tabla constante correctamente. Elige un nombre de tabla en PascalCase, asigna a cada miembro un número explícito y, a partir de ahí, el código habla 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 se adapta muy bien a las convenciones de Lua, pero cualquier esquema funciona (los códigos al estilo HTTP como 200 y 404 también están bien).
Los miembros destacan en las comparaciones. Una función que recibe un rol puede bifurcarse en función de las constantes nombradas en lugar de números simples:
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
endObserva que el parámetro es de tipo number: el patrón de tabla por sí solo no restringe qué números están permitidos. Esa garantía es exactamente lo que añaden las uniones de literales en la siguiente lección.
Desafío
FácilCrea una tabla constante llamada UserRole con tres miembros:
Admin=1Editor=2Viewer=3
Crea una función checkPermissions que reciba role: number e imprima:
Full access grantedsi el rol esUserRole.AdminEdit access grantedsi el rol esUserRole.EditorView access onlyen caso contrario
Después, en orden:
- imprime
UserRole.Admin - imprime
UserRole.Editor - imprime
UserRole.Viewer - llama a
checkPermissions(UserRole.Admin) - llama a
checkPermissions(UserRole.Editor) - 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
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
1Primeros pasos con Luau
¿Qué es Luau?¿Por qué usar Luau?Tu primer código en LuauComprobación de tipos y modos de errorRecapitulacion: Introducción a Luau4Trabajando con Funciones
Tipado de Parámetros y Valores de RetornoTipado de Funciones AnónimasFunciones que no Retornan NadaParámetros OpcionalesValores por Defecto en ParámetrosFunciones VariádicasDefinición de Tipos de FuncionesRecapitulaciones: Funciones Tipadas2Tipos principales
Tipos básicos: num, str, boolEl tipo 'any': Vía de escapeEl tipo 'unknown'Tipos nulos y opcionalesInferencia de tipos en acciónAnotaciones explícitas de tiposResumen: Práctica de tipos principales5Alias, Uniones e Intersecciones
Alias de tipos para primitivosTipos de uniónTrabajando con tipos de uniónTipos literalesTipos de intersecciónCombinando alias de tiposResumen: Combinaciones avanzadas de tipos8Enums al estilo de Luau
El patrón Enum en LuauEnums numéricos con tablasEnums de cadena como unionesUso de uniones literales como EnumsCongelación de tablas constantesRecapitulación: Enums al estilo de Luau3Tablas tipadas: Arrays y Maps
Arrays tipadosAñadir y leer elementos¿Qué es un tipo Map?Declarar y acceder a MapsIterar tablasTablas de forma mixtaArrays tipados multidimensionalestable.unpack y VarargsRecapitulaciones: Arrays y Maps