Fonctions variadiques
Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 27 sur 73.
Vous avez utilisé ... (varargs) de Lua pour écrire des fonctions qui acceptent un nombre quelconque d’arguments. Luau vous permet de typer les varargs, afin que chaque argument transmis soit vérifié :
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 déclare que chaque argument supplémentaire doit être un nombre : sum(1, "two") devient une erreur de typage. Les outils d’exécution sont ceux que vous connaissez :
{...}rassemble les varargs dans un tableau (ici un{number})select("#", ...)compte le nombre d’arguments reçus...peut être transmis directement à une autre fonction, par exemplemath.max(...)
Comme en Lua, ... doit être le dernier paramètre : les paramètres ordinaires (typés) viennent en premier, et la partie variadique collecte le reste :
function joinWords(separator: string, ...: string): string
return table.concat({...}, separator)
end
print(joinWords("-", "a", "b", "c")) -- a-b-cDéfi
FacileCréez une fonction nommée sumAll qui accepte un nombre quelconque d’arguments number (...: number) et renvoie leur somme sous forme de number.
Créez une fonction nommée countValues qui accepte un nombre quelconque d’arguments string et renvoie combien ont été passés, sous forme de number : utilisez select("#", ...).
Créez une fonction nommée joinWords qui accepte un separator: string obligatoire suivi d’un nombre quelconque d’arguments string, et les renvoie joints avec le séparateur (utilisez table.concat sur {...}) : type de retour string.
Appelez et affichez, chacun sur sa propre ligne :
sumAll(5, 10, 15)sumAll(1, 2, 3, 4, 5)countValues("a", "b", "c", "d")joinWords("-", "apple", "banana", "cherry")joinWords(" | ", "red", "green", "blue")
Essayez vous-même
-- Écrire le code ici
-- sumAll(...: number): number -- boucler sur {...}
-- countValues(...: string): number -- select("#", ...)
-- joinWords(separator: string, ...: string): string
-- puis afficher les cinq résultats
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Introduction à Luau
1Premiers pas avec Luau
Qu'est-ce que Luau ?Pourquoi utiliser Luau ?Votre premier code LuauVérification de type et modes d'erreurRécapitulatif : Introduction à Luau4Travailler avec les fonctions
Typage des paramètres et valeurs de retourTypage des fonctions anonymesFonctions ne retournant rienParamètres optionnelsValeurs par défaut des paramètresFonctions variadiquesDéfinition des types de fonctionsRécapitulatif : Fonctions typées2Types fondamentaux
Types de base : num, str, boolLe type 'any' : la porte de sortieLe type 'unknown'Types Nil et optionnelsL'inférence de type en actionAnnotations explicites de typeRécapitulatif : Pratique des types fondamentaux5Alias, unions et intersections
Alias de types pour les types primitifsTypes unionsTravailler avec les types unionsTypes littérauxTypes intersectionsCombinaison d'alias de typesRécapitulatif : Combinaisons de types avancées3Tables typées : Tableaux et Maps
Tableaux typésAjout et lecture d'élémentsQu'est-ce qu'un type Map ?Déclaration et accès aux MapsItération sur les tablesTables à formes mixtesTableaux typés multidimensionnelstable.unpack et VarargsRécapitulatif : Tableaux et MapsEntraînez-vous par vous-même : Compilateur Lua en ligne