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 o ... (varargs) do Lua para escrever funções que aceitam qualquer número de argumentos. O Luau permite que você tipar os varargs, para que cada argumento fornecido seja 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 todo argumento extra deve ser um number — sum(1, "two") se torna um erro de tipo. As ferramentas em tempo de execução são as que você já conhece:
{...}coleta os varargs em um array (aqui um{number})select("#", ...)conta quantos argumentos chegaram...pode ser passado diretamente para outra função, por exemplo,math.max(...)
Como no Lua, ... deve ser o último parâmetro — parâmetros normais (tipados) vêm primeiro, o tail variádico 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 do tipo number (...: number) e retorne a soma deles como um number.
Crie uma função chamada countValues que aceite qualquer quantidade de argumentos do tipo string e retorne quantos foram passados, como um number — use select("#", ...).
Crie uma função chamada joinWords que aceite um parâmetro obrigatório separator: string seguido por qualquer quantidade de argumentos do tipo string, e os retorne 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 -- percorra {...}
-- 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 Maps