Menu
Coddy logo textTech

Variadische Funktionen

Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy — Lektion 27 von 73.

Du hast Luas ... (varargs) verwendet, um Funktionen zu schreiben, die eine beliebige Anzahl von Argumenten akzeptieren. Luau ermöglicht es dir, die Varargs zu typisieren, sodass jedes eingehende Argument überprüft wird:

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 deklariert, dass jedes zusätzliche Argument eine Zahl sein muss — sum(1, "two") wird zu einem Typfehler. Die Laufzeit-Werkzeuge sind die, die du bereits kennst:

  • {...} sammelt die Varargs in einem Array (hier ein {number})
  • select("#", ...) zählt, wie viele Argumente angekommen sind
  • ... kann direkt an eine andere Funktion weitergegeben werden, z. B. math.max(...)

Wie in Lua muss ... der letzte Parameter sein — reguläre (typisierte) Parameter kommen zuerst, der variadische Rest sammelt den Rest:

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

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

Aufgabe

Einfach

Erstelle eine Funktion namens sumAll, die eine beliebige Anzahl von number-Argumenten (...: number) entgegennimmt und deren Summe als number zurückgibt.

Erstelle eine Funktion namens countValues, die eine beliebige Anzahl von string-Argumenten entgegennimmt und zurückgibt, wie viele übergeben wurden, als number — verwende select("#", ...).

Erstelle eine Funktion namens joinWords, die ein erforderliches separator: string gefolgt von einer beliebigen Anzahl von string-Argumenten entgegennimmt und diese verbunden mit dem Trennzeichen zurückgibt (verwende table.concat auf {...}) — Rückgabetyp string.

Rufe folgende Funktionen auf und gib die Ergebnisse jeweils in einer eigenen Zeile aus:

  1. sumAll(5, 10, 15)
  2. sumAll(1, 2, 3, 4, 5)
  3. countValues("a", "b", "c", "d")
  4. joinWords("-", "apple", "banana", "cherry")
  5. joinWords(" | ", "red", "green", "blue")

Probier es selbst

-- Schreibe den Code hier
-- sumAll(...: number): number       -- Schleife über {...}
-- countValues(...: string): number  -- select("#", ...)
-- joinWords(separator: string, ...: string): string
-- dann gib die fünf Ergebnisse aus
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Einführung in Luau