Menu
CoddyTech

Funciones variádicas

Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 29 de 80.

Has usado ... (varargs) de Lua para escribir funciones que aceptan cualquier cantidad de argumentos. Luau te permite tipar los varargs, así que se comprueba cada argumento que llega:

function sum(...: number): number
    local total = 0
    for _, n in ipairs({...}) do
        total = total + n
    end
    return total
end

print(sum(1, 2))           -- 3
print(sum(1, 2, 3, 4, 5))  -- 15

...: number declara que cada argumento adicional debe ser un número: sum(1, "two") se convierte en un error de tipo. Las herramientas de ejecución son las que ya conoces:

  • {...} reúne los varargs en un arreglo (aquí, un {number})
  • select("#", ...) cuenta cuántos argumentos llegaron
  • ... se puede pasar directamente a otra función, por ejemplo, math.max(...)

Al igual que en Lua, ... debe ser el último parámetro: primero van los parámetros normales (con tipo), y el segmento variádico reúne el resto:

function joinWords(separator: string, ...: string): string
    return table.concat({...}, separator)
end

print(joinWords("-", "a", "b", "c"))  -- a-b-c
challenge icon

Desafío

Fácil

Escribe dos funciones que acepten cualquier cantidad de argumentos.

  1. Escribe local function sumAll(...: number): number, que sume {...} con ipairs.
  2. Escribe local function joinWords(separator: string, ...: string): string, que devuelva table.concat({...}, separator).
  3. Imprime sumAll(5, 10, 15) y joinWords("-", "apple", "banana", "cherry").

Pulsa Ejecutar código: el resultado muestra 30 y apple-banana-cherry.

Pruébalo tú mismo

-- 1) sumAll(...: number): number
-- 2) joinWords(separator: string, ...: string): string
-- 3) imprime los dos resultados

Todas las lecciones de Introducción a Luau

Practica por tu cuenta: Compilador de Luau online