Assinaturas de Índice
Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 72 de 73.
Você conheceu tipos de mapa como {[string]: number} no capítulo sobre tabelas: uma assinatura de índice: qualquer chave de string mapeia para um valor numérico. 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 em tempo de execução.
type Counts = {[string]: number}
local counts: Counts = {}
counts["potion"] = 3 -- qualquer chave string é permitida
counts["sword"] = 1
counts["potion"] += 1 -- os valores são verificados como númerosDois fatos de tempo de 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 "missing" 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 percorrer as chaves de maneiras diferentes. Sempre que a saída precisar ser previsível, reúna as chaves em um array, aplique table.sort a elas 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ácilConte as recompensas obtidas usando um mapa tipado.
- Declare
type Counts = {[string]: number}. - Escreva
countItems(items: {string}): Countsque construa um mapaCountsnovo, contando quantas vezes cada string aparece (use o padrão(counts[item] or 0) + 1). - Crie
local loot: {string} = {"potion", "sword", "potion", "shield", "potion", "sword"}e faça a contagem. - Imprima uma linha
[name]: [count]por item distinto, em ordem alfabética: reúna as chaves, usetable.sortnelas e depois imprima.
Saída esperada:
potion: 3
shield: 1
sword: 2Experimente você mesmo
-- Escreva o código aqui
-- 1) type Counts = {[string]: number}
-- 2) countItems(items: {string}): Counts usando (counts[item] or 0) + 1
-- 3) conte o array loot da tarefa
-- 4) colete as chaves, table.sort nelas, imprima as linhas `{name}: {count}`
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 Luau11Tópicos Avançados
Asserções de TipoType Guards com typeofO Tipo neverSegurança Nula no Modo EstritoAssinaturas de ÍndiceRecapitulação: Ajuste Fino de Tipos3Tabelas 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 MapsPratique por conta própria: Compilador de Lua online