table.unpack und Varargs
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy — Lektion 20 von 73.
Manchmal liegen Werte in einem Array vor, werden aber als separate Werte benötigt — beispielsweise, um jedes Element als eigenes Argument zu übergeben. Das macht table.unpack: Es gibt alle Elemente eines Arrays entpackt zurück.
local scores: {number} = {85, 92, 78}
print(table.unpack(scores)) -- 85 92 78 (eine Zeile, drei Werte)
print(math.max(table.unpack(scores))) -- 92 — jedes Element wurde zu einem ArgumentDas Spiegelbild dazu sind varargs: Eine Funktion, die beliebig viele Argumente über ... akzeptiert. Sie haben ... in Lua bereits gesehen — Luau ermöglicht es Ihnen, diesen Parameter zu typisieren (Typed), sodass jeder eingehende Wert übereinstimmen 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 Features greifen ineinander: sum(table.unpack(scores)) entpackt das Array direkt in die Vararg-Funktion — Luaus Antwort auf das Spread-Call-Muster, das Sie aus anderen Sprachen kennen. table.unpack liest das Array, ohne es zu verändern.
Aufgabe
EinfachErstelle ein typisiertes Array scores: {number} mit 85, 92 und 78.
- Gib alle Scores auf einer Zeile unter Verwendung von
table.unpackaus. - Gib den höchsten Score unter Verwendung von
math.maxundtable.unpackaus. - Definiere
local function sum(...: number): number, die alle ihre Argumente unter Verwendung vonselect("#", ...)undselect(i, ...)aufsummiert, und gib dannsum(table.unpack(scores))aus. - Gib
sum(10, 20)aus, um zu zeigen, dass dieselbe Funktion auch mit einfachen Argumenten funktioniert.
Probier es selbst
-- Schreibe 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