Menu
Coddy logo textTech

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 corretamente o padrão de tabela de constantes. Escolha um nome de tabela em PascalCase, atribua um número explícito a cada membro e, a partir daí, o código passa a usar nomes:

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

Ao contrário do enum do TypeScript, nada é numerado automaticamente. Você escolhe cada valor. Começar em 1 combina bem com as convenções do Lua, mas qualquer esquema funciona (códigos no estilo HTTP, como 200 e 404, também são válidos).

Os membros são especialmente úteis em comparações. Uma função que recebe uma função pode ramificar usando as constantes nomeadas em vez de números isolados:

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

Observe que o parâmetro é tipado como number: o padrão de tabela, por si só, não restringe quais números são permitidos. Essa garantia é exatamente o que as uniões literais adicionam na próxima lição.

challenge icon

Desafio

Fácil

Crie uma tabela de constantes chamada UserRole com três membros:

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

Crie uma função checkPermissions que receba role: number e imprima:

  • Full access granted se o papel for UserRole.Admin
  • Edit access granted se o papel for UserRole.Editor
  • View access only caso contrário

Em seguida, na ordem:

  1. imprima UserRole.Admin
  2. imprima UserRole.Editor
  3. imprima UserRole.Viewer
  4. chame checkPermissions(UserRole.Admin)
  5. chame checkPermissions(UserRole.Editor)
  6. 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
quiz iconTeste seus conhecimentos

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

Pratique por conta própria: Compilador de Lua online