Assinaturas de Índice
Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 78 de 80.
Você conheceu tipos de mapa como {[string]: number} no capítulo sobre tabelas: uma assinatura de índice: qualquer chave do tipo string mapeia para um valor do tipo number. Eles são úteis quando as chaves não são conhecidas enquanto você escreve o código: contadores, configurações, caches, pontuações: qualquer coisa criada durante a execução.
type Counts = {[string]: number}
local counts: Counts = {}
counts["potion"] = 3 -- qualquer chave do tipo string é permitida
counts["sword"] = 1
counts["potion"] += 1 -- os valores são verificados como númerosDois fatos sobre a execução são importantes ao trabalhar com mapas. Primeiro, ler uma chave que nunca foi definida retorna nil: o padrão clássico de contagem lida com isso usando or, transformando um valor "ausente" em 0:
counts[item] = (counts[item] or 0) + 1Segundo, pairs() itera pelas chaves de um mapa em uma ordem não garantida: executar o mesmo programa duas vezes pode visitar as chaves em ordens diferentes. Sempre que a saída precisar ser previsível, reúna as chaves em um array, ordene-as com table.sort e itere pelo array ordenado:
local keys: {string} = {}
for key in pairs(counts) do
table.insert(keys, key)
end
table.sort(keys)
for _, key in ipairs(keys) do
print(`{key}: {counts[key]}`)
endDesafio
FácilMantenha as pontuações de jogadores cujos nomes você não conhece antecipadamente.
- Escreva
type Scores = {[string]: number}e crielocal scores: Scores = {}. - Adicione pontos:
scores["mia"] = (scores["mia"] or 0) + 5e, em seguida, faça o mesmo para"leo"com3. - Imprima
scores["mia"],scores["leo"]escores["zed"].
Pressione Executar código: a saída mostra 5, 3 e nil.
Experimente você mesmo
-- 1) type Scores = {[string]: number}, depois local scores: Scores = {}
-- 2) adicione 5 pontos para "mia" e 3 para "leo"
-- 3) imprima mia, leo e zed
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
Tipagem de parâmetros e valores de retornoTipagem de funções anônimasFunções sem retornoParâmetros opcionaisValores padrão dos parâmetrosValores padrão para booleanosFunções variádicasDefinindo tipos de funçãoRecapitulação: funções tipadas2Tipos básicos
Número, string e booleanoO tipo 'any': válvula de escapeO tipo 'unknown'Tipos nulos e opcionaisInferência de tipos na práticaAnotações explícitas de tipoRevisão: prática com tipos básicos5Aliases, 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 Tipos3Tabelas Tipadas: Arrays e Maps
Arrays TipadosAdicionando e Lendo ElementosO que é um Tipo Map?Declarando e Acessando MapsPercorrendo TabelasTabelas com Formatos MistosLendo uma GradeConstruindo uma Gradetable.unpackRevisão: Arrays e MapsPratique por conta própria: Compilador de Luau online