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-cDesafio
FácilEscreva duas funções que aceitem qualquer quantidade de argumentos.
- Escreva
local function sumAll(...: number): numberque some{...}usandoipairs. - Escreva
local function joinWords(separator: string, ...: string): stringque retornetable.concat({...}, separator). - Imprima
sumAll(5, 10, 15)ejoinWords("-", "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
1Começando com o Luau
O que é Luau?Por que usar Luau?Seu primeiro código em LuauVerificação de tipos e modos de erroRecapitulando: Introdução ao Luau4Trabalhando com funções
Tipagem de parâmetros e valores de retornoTipagem de funções anônimasFunções sem retornoParâmetros opcionaisValores padrão dos parâmetrosValores padrão para booleanosFunções variádicasDefinindo tipos de funçãoRecapitulação: funções tipadas2Tipos básicos
Número, string e booleanoO tipo 'any': válvula de escapeO tipo 'unknown'Tipos nulos e opcionaisInferência de tipos na práticaAnotações explícitas de tipoRevisão: prática com tipos básicos5Aliases, Uniões, Interseções
Aliases de Tipos para PrimitivosTipos de UniãoTrabalhando com Tipos de UniãoTipos LiteraisTipos de InterseçãoCombinando Aliases de TiposRecapitulando: Combinações Avançadas de Tipos3Tabelas Tipadas: Arrays e Maps
Arrays TipadosAdicionando e Lendo ElementosO que é um Tipo Map?Declarando e Acessando MapsPercorrendo TabelasTabelas com Formatos MistosLendo uma GradeConstruindo uma Gradetable.unpackRevisão: Arrays e MapsPratique por conta própria: Compilador de Luau online