table.unpack y Varargs
Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 20 de 73.
A veces tienes valores en un array, pero los necesitas como valores separados: por ejemplo, para pasar cada elemento como su propio argumento. Para eso sirve table.unpack: devuelve todos los elementos de un array, expandidos.
local scores: {number} = {85, 92, 78}
print(table.unpack(scores)) -- 85 92 78 (one line, three values)
print(math.max(table.unpack(scores))) -- 92 — cada elemento se convirtió en un argumentoLa imagen inversa son los argumentos variables: una función que acepta cualquier cantidad de argumentos mediante .... Ya has visto ... en Lua: Luau permite tiparlo, de modo que cada valor recibido debe coincidir:
local function sum(...: number): number
local total = 0
for i = 1, select("#", ...) do
total += select(i, ...)
end
return total
endselect("#", ...) devuelve cuántos argumentos llegaron, y select(i, ...) devuelve los argumentos desde la posición i en adelante: usado como un único valor en una expresión, equivale efectivamente a «el argumento i-ésimo».
Las dos funciones encajan: sum(table.unpack(scores)) expande el array directamente en la función de argumentos variables: la respuesta de Luau al patrón de llamada con expansión que verías en otros lenguajes. table.unpack lee el array sin modificarlo.
Desafío
FácilCrea un array tipado scores: {number} con 85, 92 y 78.
- Imprime todas las puntuaciones en una sola línea usando
table.unpack. - Imprime la puntuación más alta usando
math.maxytable.unpack. - Define
local function sum(...: number): numberque sume todos sus argumentos usandoselect("#", ...)yselect(i, ...); después, imprimesum(table.unpack(scores)). - Imprime
sum(10, 20)para mostrar que la misma función funciona con argumentos simples.
Pruébalo tú mismo
-- Escribe código aquí
-- 1) declara scores: {number} = {85, 92, 78}
-- 2) print(table.unpack(scores)) y el math.max de los scores desempaquetados
-- 3) define sum(...: number): number con select, print sum(table.unpack(scores))
-- 4) print sum(10, 20)
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
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 Luau4Trabajando con Funciones
Tipado de Parámetros y Valores de RetornoTipado de Funciones AnónimasFunciones que no Retornan NadaParámetros OpcionalesValores por Defecto en ParámetrosFunciones VariádicasDefinición de Tipos de FuncionesRecapitulaciones: Funciones Tipadas2Tipos principales
Tipos básicos: num, str, boolEl tipo 'any': Vía de escapeEl tipo 'unknown'Tipos nulos y opcionalesInferencia de tipos en acciónAnotaciones explícitas de tiposResumen: Práctica de tipos principales5Alias, 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 Maps
Arrays tipadosAñadir y leer elementos¿Qué es un tipo Map?Declarar y acceder a MapsIterar tablasTablas de forma mixtaArrays tipados multidimensionalestable.unpack y VarargsRecapitulaciones: Arrays y MapsPractica por tu cuenta: Compilador de Lua online