Menu
Coddy logo textTech

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 argumento

La 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
end

select("#", ...) 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.

challenge icon

Desafío

Fácil

Crea un array con tipos scores: {number} con 85, 92 y 78.

  1. Imprime todos los puntajes en una sola línea usando table.unpack.
  2. Imprime el puntaje más alto usando math.max y table.unpack.
  3. Define local function sum(...: number): number que sume todos sus argumentos usando select("#", ...) y select(i, ...), después imprime sum(table.unpack(scores)).
  4. 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)
quiz iconPonte a prueba

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