Funciones Variádicas
Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 27 de 73.
Has usado ... (varargs) de Lua para escribir funciones que aceptan cualquier cantidad de argumentos. Luau te permite tipar los varargs, de modo que se comprueba cada argumento que entra:
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 tipos. Las herramientas de ejecución son las que ya conoces:
{...}recopila los varargs en un array (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 parámetro último: los parámetros normales (tipados) van primero y la parte variádica recopila el resto:
function joinWords(separator: string, ...: string): string
return table.concat({...}, separator)
end
print(joinWords("-", "a", "b", "c")) -- a-b-cDesafío
FácilCrea una función llamada sumAll que acepte cualquier cantidad de argumentos number (...: number) y devuelva su suma como un number.
Crea una función llamada countValues que acepte cualquier cantidad de argumentos string y devuelva cuántos se pasaron, como un number: usa select("#", ...).
Crea una función llamada joinWords que acepte un separator: string requerido seguido de cualquier cantidad de argumentos string, y los devuelva unidos con el separador (usa table.concat sobre {...}): tipo de retorno string.
Llama e imprime, cada uno en su propia línea:
sumAll(5, 10, 15)sumAll(1, 2, 3, 4, 5)countValues("a", "b", "c", "d")joinWords("-", "apple", "banana", "cherry")joinWords(" | ", "red", "green", "blue")
Pruébalo tú mismo
-- Escribe código aquí
-- sumAll(...: number): number -- bucle sobre {...}
-- countValues(...: string): number -- select("#", ...)
-- joinWords(separator: string, ...: string): string
-- luego imprime los cinco resultados
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Introducción a Luau
1Primeros pasos con Luau
¿Qué es Luau?¿Por qué usar Luau?Tu primer código en LuauComprobación de tipos y modos de errorRecapitulacion: Introducción a Luau4Trabajando con Funciones
Tipado de Parámetros y Valores de RetornoTipado de Funciones AnónimasFunciones que no Retornan NadaParámetros OpcionalesValores por Defecto en ParámetrosFunciones VariádicasDefinición de Tipos de FuncionesRecapitulaciones: Funciones Tipadas2Tipos principales
Tipos básicos: num, str, boolEl tipo 'any': Vía de escapeEl tipo 'unknown'Tipos nulos y opcionalesInferencia de tipos en acciónAnotaciones explícitas de tiposResumen: Práctica de tipos principales5Alias, Uniones e Intersecciones
Alias de tipos para primitivosTipos de uniónTrabajando con tipos de uniónTipos literalesTipos de intersecciónCombinando alias de tiposResumen: Combinaciones avanzadas de tipos3Tablas tipadas: Arrays y Maps
Arrays tipadosAñadir y leer elementos¿Qué es un tipo Map?Declarar y acceder a MapsIterar tablasTablas de forma mixtaArrays tipados multidimensionalestable.unpack y VarargsRecapitulaciones: Arrays y MapsPractica por tu cuenta: Compilador de Lua online