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. 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 argumento

La 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
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, 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.

challenge icon

Desafío

Fácil

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

  1. Imprime todas las puntuaciones en una sola línea usando table.unpack.
  2. Imprime la puntuación más alta 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

Practica por tu cuenta: Compilador de Lua online