Firmas de índice
Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 78 de 80.
Ya conociste tipos de mapa como {[string]: number} en el capítulo sobre tablas: una firma de índice: cualquier clave de tipo string corresponde a un valor de tipo number. Son útiles cuando no se conocen las claves mientras escribes el código: contadores, ajustes, cachés, puntuaciones; cualquier cosa que se construya durante la ejecución.
type Counts = {[string]: number}
local counts: Counts = {}
counts["potion"] = 3 -- se permite cualquier clave de tipo string
counts["sword"] = 1
counts["potion"] += 1 -- se comprueba que los valores sean númerosHay dos hechos sobre el tiempo de ejecución que importan al trabajar con mapas. Primero, leer una clave que nunca se asignó devuelve nil: el patrón clásico para contar lo resuelve con or, convirtiendo «ausente» en 0:
counts[item] = (counts[item] or 0) + 1Segundo, pairs() itera por las claves de un mapa sin un orden garantizado: al ejecutar el mismo programa dos veces, las claves pueden recorrerse en un orden distinto. Siempre que la salida deba ser predecible, reúne las claves en un array, aplícales table.sort e itera por el 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]}`)
endDesafío
FácilGuarda las puntuaciones de jugadores cuyos nombres no conoces de antemano.
- Escribe
type Scores = {[string]: number}y crealocal scores: Scores = {}. - Añade puntos:
scores["mia"] = (scores["mia"] or 0) + 5, después haz lo mismo con"leo"y3. - Imprime
scores["mia"],scores["leo"]yscores["zed"].
Pulsa Ejecutar código: la salida muestra 5, 3 y nil.
Pruébalo tú mismo
-- 1) type Scores = {[string]: number}, luego local scores: Scores = {}
-- 2) añade 5 puntos para "mia" y 3 para "leo"
-- 3) imprime mia, leo y zed
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 Luau4Trabajar con funciones
Tipado de parámetros y valores de retornoTipado de funciones anónimasFunciones que no devuelven nadaParámetros opcionalesValores predeterminados de parámetrosValores predeterminados para booleanosFunciones variádicasDefinir tipos de funcionesRepaso: funciones tipadas7Proyecto: Gestor de tareas tipado
Proyecto: La estructura de una tareaFunción para añadir una tarea2Tipos fundamentales
Número, cadena y booleanoEl tipo 'any': una salida de emergenciaEl tipo 'unknown'Tipos nulos y opcionalesLa inferencia de tipos en acciónAnotaciones de tipo explícitasRepaso: práctica de tipos fundamentales5Alias, 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 tipos3Tablas tipadas: arrays y mapas
Arrays tipadosAgregar y leer elementos¿Qué es un tipo mapa?Declarar y acceder a mapasRecorrer tablasTablas de formas mixtasLeer una cuadrículaConstruir una cuadrículatable.unpackRepaso: arrays y mapasPractica por tu cuenta: Compilador de Luau online