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. Eso es table.unpack: devuelve todos los elementos de un array, desplegados.
local scores: {number} = {85, 92, 78}
print(table.unpack(scores)) -- 85 92 78 (una línea, tres valores)
print(math.max(table.unpack(scores))) -- 92 — cada elemento se convirtió en un argumentoLa imagen especular es varargs: una función que acepta cualquier cantidad de argumentos a través de .... Has visto ... en Lua — Luau te permite darle un tipo, para que cada valor entrante deba 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, eso es efectivamente "el i-ésimo argumento".
Las dos características encajan perfectamente: sum(table.unpack(scores)) despliega el array directamente dentro de la función vararg — la respuesta de Luau al patrón de llamada de dispersión que verías en otros lenguajes. table.unpack lee el array sin modificarlo.
Desafío
FácilCrea un array con tipos scores: {number} con 85, 92 y 78.
- Imprime todos los puntajes en una sola línea usando
table.unpack. - Imprime el puntaje más alto 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 Maps