table.unpack und Varargs
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 20 von 73.
Manchmal hast du Werte in einem Array, brauchst sie aber als separate Werte: zum Beispiel, um jedes Element als eigenes Argument zu übergeben. Dafür gibt es table.unpack: Es gibt alle Elemente eines Arrays einzeln zurück.
local scores: {number} = {85, 92, 78}
print(table.unpack(scores)) -- 85 92 78 (one line, three values)
print(math.max(table.unpack(scores))) -- 92 — jedes Element wurde zu einem ArgumentDas Gegenstück dazu sind Varargs: eine Funktion, die über ... eine beliebige Anzahl von Argumenten akzeptiert. Du hast ... bereits in Lua gesehen: Luau ermöglicht es dir, den Typ dafür anzugeben, sodass jeder eingehende Wert dazu passen muss:
local function sum(...: number): number
local total = 0
for i = 1, select("#", ...) do
total += select(i, ...)
end
return total
endselect("#", ...) gibt zurück, wie viele Argumente angekommen sind, und select(i, ...) gibt die Argumente ab Position i zurück: Als einzelner Wert in einem Ausdruck verwendet, entspricht das effektiv dem „i-ten Argument“.
Die beiden Funktionen ergänzen sich: sum(table.unpack(scores)) verteilt das Array direkt auf die Vararg-Funktion: Luau bietet damit das Gegenstück zum Spread-Aufrufmuster, das du in anderen Sprachen sehen würdest. table.unpack liest das Array, ohne es zu verändern.
Aufgabe
EinfachErstelle ein typisiertes Array scores: {number} mit 85, 92 und 78.
- Gib alle Punktzahlen in einer Zeile mit
table.unpackaus. - Gib die höchste Punktzahl mit
math.maxundtable.unpackaus. - Definiere
local function sum(...: number): number, die mithilfe vonselect("#", ...)undselect(i, ...)alle ihre Argumente addiert, und gib anschließendsum(table.unpack(scores))aus. - Gib
sum(10, 20)aus, um zu zeigen, dass dieselbe Funktion auch mit einfachen Argumenten funktioniert.
Probier es selbst
-- Schreibe den Code hier
-- 1) deklariere scores: {number} = {85, 92, 78}
-- 2) print(table.unpack(scores)) und das math.max der entpackten scores
-- 3) definiere sum(...: number): number mit select, print sum(table.unpack(scores))
-- 4) print sum(10, 20)
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Übe selbstständig: Online-Lua-Compiler