Menu
CoddyTech

Funções variádicas

Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 29 de 80.

Você usou ... (varargs) do Lua para escrever funções que aceitam qualquer número de argumentos. Luau permite tipar os varargs, então cada argumento recebido é verificado:

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 extra deve ser um número: sum(1, "two") se torna um erro de tipo. As ferramentas de tempo de execução são as que você já conhece:

  • {...} reúne os varargs em um array (aqui, um {number})
  • select("#", ...) conta quantos argumentos foram recebidos
  • ... pode ser passado diretamente para outra função, por exemplo, math.max(...)

Como em Lua, ... deve ser o último parâmetro: os parâmetros regulares (tipados) vêm primeiro, e a parte variádica reúne o restante:

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

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

Desafio

Fácil

Escreva duas funções que aceitem qualquer quantidade de argumentos.

  1. Escreva local function sumAll(...: number): number que some {...} usando ipairs.
  2. Escreva local function joinWords(separator: string, ...: string): string que retorne table.concat({...}, separator).
  3. Imprima sumAll(5, 10, 15) e joinWords("-", "apple", "banana", "cherry").

Pressione Executar código: a saída mostra 30 e apple-banana-cherry.

Experimente você mesmo

-- 1) sumAll(...: number): number
-- 2) joinWords(separator: string, ...: string): string
-- 3) imprima os dois resultados

Todas as lições de Introdução ao Luau

Pratique por conta própria: Compilador de Luau online