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 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 Argument

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

challenge icon

Aufgabe

Einfach

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

  1. Gib alle Scores auf einer Zeile unter Verwendung von table.unpack aus.
  2. Gib den höchsten Score unter Verwendung von math.max und table.unpack aus.
  3. Definiere local function sum(...: number): number, die alle ihre Argumente unter Verwendung von select("#", ...) und select(i, ...) aufsummiert, und gib dann 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 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