Funções Variádicas
Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 27 de 73.
Você usou ... (varargs) do Lua para escrever funções que aceitam qualquer número de argumentos. O Luau permite tipar os varargs, portanto 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 adicional deve ser um número: sum(1, "two") se torna um erro de tipo. As ferramentas de execução são as que você já conhece:
{...}coleta 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(...)
Assim como no Lua, ... deve ser o parâmetro último: os parâmetros regulares (tipados) vêm primeiro, e a cauda variádica coleta o restante:
function joinWords(separator: string, ...: string): string
return table.concat({...}, separator)
end
print(joinWords("-", "a", "b", "c")) -- a-b-cDesafio
FácilCrie uma função chamada sumAll que aceite qualquer quantidade de argumentos number (...: number) e retorne a soma deles como um number.
Crie uma função chamada countValues que aceite qualquer quantidade de argumentos string e retorne quantos foram passados, como um number: use select("#", ...).
Crie uma função chamada joinWords que aceite um separator: string obrigatório seguido por qualquer quantidade de argumentos string e retorne-os unidos pelo separador (use table.concat em {...}): tipo de retorno string.
Chame e imprima, cada um em sua própria linha:
sumAll(5, 10, 15)sumAll(1, 2, 3, 4, 5)countValues("a", "b", "c", "d")joinWords("-", "apple", "banana", "cherry")joinWords(" | ", "red", "green", "blue")
Experimente você mesmo
-- Escreva o código aqui
-- sumAll(...: number): number -- loop sobre {...}
-- countValues(...: string): number -- select("#", ...)
-- joinWords(separator: string, ...: string): string
-- então imprima os cinco resultados
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
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
Tipando Parâmetros e Valores de RetornoTipando Funções AnônimasFunções que Não Retornam NadaParâmetros OpcionaisValores Padrão para ParâmetrosFunções VariádicasDefinindo Tipos de FunçõesRecapitulação: Funções Tipadas2Tipos Fundamentais
Tipos Básicos: num, str, boolO Tipo 'any': Escape HatchO Tipo 'unknown'Tipos Nil e OpcionaisInferência de Tipos na PráticaAnotações Explícitas de TiposReciclagem: Prática de Tipos Fundamentais5Aliases, 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 MapsIterando Sobre TabelasTabelas de Formato MistoArrays Tipados Multidimensionaistable.unpack e VarargsRecapitulando: Arrays e MapsPratique por conta própria: Compilador de Lua online