Menu
Coddy logo textTech

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 Argument

Das 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
end

select("#", ...) 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.

challenge icon

Aufgabe

Einfach

Erstelle ein typisiertes Array scores: {number} mit 85, 92 und 78.

  1. Gib alle Punktzahlen in einer Zeile mit table.unpack aus.
  2. Gib die höchste Punktzahl mit math.max und table.unpack aus.
  3. Definiere local function sum(...: number): number, die mithilfe von select("#", ...) und select(i, ...) alle ihre Argumente addiert, und gib anschließend sum(table.unpack(scores)) aus.
  4. 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)
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