Enums Numéricos com Tables
Parte da seção Introdução ao Luau do Journey de Lua da Coddy — lição 52 de 73.
Vamos construir o padrão de tabela constante adequadamente. Escolha um nome de tabela em PascalCase, atribua a cada membro um número explícito e, a partir daí, o código fala em nomes:
local UserRole = {
Admin = 1,
Editor = 2,
Viewer = 3,
}Diferente do enum do TypeScript, nada é numerado automaticamente — você escolhe cada valor. Começar a partir de 1 se adapta muito bem às convenções do Lua, mas qualquer esquema funciona (códigos no estilo HTTP como 200 e 404 também funcionam bem).
Os membros se destacam em comparações. Uma função que recebe um role pode se ramificar com base nas constantes nomeadas em vez de números puros:
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
endObserve que o parâmetro é tipado como number — o padrão de tabela sozinho não restringe quais números são permitidos. Essa garantia é exatamente o que as uniões de literais adicionam na próxima lição.
Desafio
FácilCrie uma tabela constante chamada UserRole com três membros:
Admin=1Editor=2Viewer=3
Crie uma função checkPermissions que recebe role: number e imprime:
Full access grantedse o papel forUserRole.AdminEdit access grantedse o papel forUserRole.EditorView access onlycaso contrário
Em seguida, na ordem:
- imprima
UserRole.Admin - imprima
UserRole.Editor - imprima
UserRole.Viewer - chame
checkPermissions(UserRole.Admin) - chame
checkPermissions(UserRole.Editor) - chame
checkPermissions(UserRole.Viewer)
Experimente você mesmo
-- Escreva o código aqui
-- 1) crie a tabela constante UserRole (Admin=1, Editor=2, Viewer=3)
-- 2) escreva checkPermissions(role: number) com if/elseif/else
-- 3) imprima os três membros, depois chame a função para cada um
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Introdução ao Luau
1Começando com o Luau
O que é Luau?Por que usar Luau?Seu primeiro código em LuauVerificação de tipos e modos de erroRecapitulando: Introdução ao Luau4Trabalhando com Funções
Tipando Parâmetros e Valores de RetornoTipando Funções AnônimasFunções que Não Retornam NadaParâmetros OpcionaisValores Padrão para ParâmetrosFunções VariádicasDefinindo Tipos de FunçõesRecapitulação: Funções Tipadas2Tipos Fundamentais
Tipos Básicos: num, str, boolO Tipo 'any': Escape HatchO Tipo 'unknown'Tipos Nil e OpcionaisInferência de Tipos na PráticaAnotações Explícitas de TiposReciclagem: Prática de Tipos Fundamentais5Aliases, Uniões, Interseções
Aliases de Tipos para PrimitivosTipos de UniãoTrabalhando com Tipos de UniãoTipos LiteraisTipos de InterseçãoCombinando Aliases de TiposRecapitulando: Combinações Avançadas de Tipos8Enums, do Jeito Luau
O Padrão Enum no LuauEnums Numéricos com TablesEnums de String como UnionsUsando Enums de Union LiteralCongelando Tables ConstantesRecapitulação: Enums, do Jeito Luau3Tabelas Tipadas: Arrays e Maps
Arrays TipadosAdicionando e Lendo ElementosO que é um Tipo Map?Declarando e Acessando MapsIterando Sobre TabelasTabelas de Formato MistoArrays Tipados Multidimensionaistable.unpack e VarargsRecapitulando: Arrays e Maps