Menu
CoddyTech

Fonctions variadiques

Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 29 sur 80.

Tu as utilisé ... (varargs) de Lua pour écrire des fonctions qui acceptent un nombre quelconque d’arguments. Luau te 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") provoque une erreur de type. Les outils d’exécution sont ceux que tu connais :

  • {...} 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 exemple math.max(...)

Comme en Lua, ... doit être le dernier paramètre : les paramètres ordinaires (typés) viennent en premier, et la partie variadique rassemble le reste :

function joinWords(separator: string, ...: string): string
    return table.concat({...}, separator)
end

print(joinWords("-", "a", "b", "c"))  -- a-b-c
challenge icon

Défi

Facile

Écris deux fonctions qui prennent un nombre quelconque d’arguments.

  1. Écris local function sumAll(...: number): number qui additionne {...} avec ipairs.
  2. Écris local function joinWords(separator: string, ...: string): string qui renvoie table.concat({...}, separator).
  3. Affiche sumAll(5, 10, 15) et joinWords("-", "apple", "banana", "cherry").

Appuie sur Exécuter le code : la sortie affiche 30 et apple-banana-cherry.

Essayez vous-même

-- 1) sumAll(...: number): number
-- 2) joinWords(separator: string, ...: string): string
-- 3) afficher les deux résultats

Toutes les leçons de Introduction à Luau

Entraînez-vous par vous-même : Compilateur Luau en ligne