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 ... (variable Argumentanzahl) verwendet, um Funktionen zu schreiben, die eine beliebige Anzahl von Argumenten akzeptieren. Luau ermöglicht es dir, die variablen Argumente 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 Laufzeitwerkzeuge sind die, die du bereits kennst:

  • {...} sammelt die variablen Argumente in einem Array (hier einem {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 variable Rest nimmt die übrigen Argumente auf:

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 ihre Summe als number zurückgibt.

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

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

Rufe die folgenden Ausdrücke auf und gib jeden 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

Übe selbstständig: Online-Lua-Compiler