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-cAufgabe
EinfachErstelle 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:
sumAll(5, 10, 15)sumAll(1, 2, 3, 4, 5)countValues("a", "b", "c", "d")joinWords("-", "apple", "banana", "cherry")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
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
1Erste Schritte mit Luau
Was ist Luau?Warum Luau nutzen?Dein erster Luau-CodeTypprüfung & FehlermodiZusammenfassung: Einführung in Luau4Arbeiten mit Funktionen
Typisierung von Parametern & RückgabewertenTypisierung von anonymen FunktionenFunktionen ohne RückgabewertOptionale ParameterStandard-ParameterwerteVariadische FunktionenDefinieren von FunktionstypenZusammenfassung: Typisierte Funktionen2Grundtypen
Grundlegende Typen: num, str, boolDer Typ 'any': Der AuswegDer Typ 'unknown'Nil- & optionale TypenTypinferenz in der PraxisExplizite TypannotationenZusammenfassung: Praxis zu Grundtypen5Typ-Aliase, Union-Typen und Schnittmengen-Typen
Typ-Aliase für PrimitivenUnion-TypenArbeiten mit Union-TypenLiterale TypenSchnittmengen-Typen (Intersection Types)Kombination von Typ-AliasenZusammenfassung: Fortgeschrittene Typ-Kombinationen3Typisierte Tabellen: Arrays & Maps
Typisierte ArraysHinzufügen und Lesen von ElementenWas ist ein Map-Typ?Deklarieren und Zugreifen auf MapsIterieren von TabellenGemischt-strukturierte TabellenMehrdimensionale typisierte Arraystable.unpack und VarargsZusammenfassung: Arrays und Maps