Menu
Coddy logo textTech

Variadische Funktionen (...)

Teil des Abschnitts Logic & Flow der Lua-Journey von Coddy — Lektion 11 von 54.

Manchmal benötigen Sie eine Funktion, die mit einer beliebigen Anzahl von Argumenten arbeiten kann. Vielleicht möchten Sie die Summe von zwei Zahlen berechnen, oder von drei, oder von zehn – ohne für jeden Fall separate Funktionen zu schreiben. Lua bietet hierfür eine spezielle Syntax an: die drei Punkte ...

Wenn Sie ... in der Parameterliste einer Funktion platzieren, wird sie zu einer variadischen Funktion, die eine beliebige Anzahl von Argumenten akzeptiert:

function sum(...)
    -- Funktionskörper
end

Innerhalb der Funktion können Sie auf diese Argumente zugreifen, indem Sie erneut ... verwenden. Um einfacher mit ihnen zu arbeiten, können Sie diese mithilfe von geschweiften Klammern in eine Tabelle packen:

function sum(...)
    local args = {...}
    local total = 0
    for i = 1, #args do
        total = total + args[i]
    end
    return total
end

print(sum(5, 10, 15))  -- Ausgabe: 30
print(sum(1, 2, 3, 4, 5))  -- Ausgabe: 15

Der Ausdruck {...} erstellt eine Tabelle im Listenstil, die alle an die Funktion übergebenen Argumente enthält. Sie können dann wie durch jede andere Tabelle iterieren, indem Sie den Längenoperator # oder ipairs() verwenden.

challenge icon

Aufgabe

Einfach

Schreiben Sie eine Funktion calculateAverage, die eine beliebige Anzahl von numerischen Argumenten akzeptiert und deren Durchschnitt zurückgibt.

Verwenden Sie die variadische Syntax ..., um eine flexible Anzahl von Argumenten zu akzeptieren, packen Sie diese in eine Tabelle, berechnen Sie deren Summe und teilen Sie diese durch die Anzahl.

Hinweis: Der Starter-Code (markiert mit "Don't touch this code") liest Zahlen aus der Eingabe, konvertiert jede einzelne mit tonumber() von Text in eine Zahl und speichert sie in einer Tabelle namens numbers. Am Ende ruft er Ihre Funktion mit unpack(numbers) auf, wodurch die Werte der Tabelle als einzelne Argumente übergeben werden — Ihre Funktion empfängt diese also als .... Sie müssen diesen Code nicht im Detail ändern oder verstehen; konzentrieren Sie sich einfach auf das Schreiben von calculateAverage.

Logik:

  • Packen Sie alle Argumente mit {...} in eine Tabelle
  • Iterieren Sie durch die Tabelle, um die Summe aller Zahlen zu berechnen
  • Teilen Sie die Summe durch die Anzahl der Argumente, um den Durchschnitt zu erhalten
  • Geben Sie den Durchschnitt als Zahl zurück

Parameter:

  • ... (numbers): Variable Anzahl an numerischen Argumenten

Rückgabewert: Der Durchschnitt aller angegebenen Zahlen (number)

Spickzettel

Lua unterstützt variadische Funktionen, die eine beliebige Anzahl von Argumenten unter Verwendung der Syntax mit drei Punkten ... akzeptieren können:

function sum(...)
    -- Funktionskörper
end

Packen Sie innerhalb einer variadischen Funktion die Argumente mit {...} in eine Tabelle:

function sum(...)
    local args = {...}
    local total = 0
    for i = 1, #args do
        total = total + args[i]
    end
    return total
end

print(sum(5, 10, 15))  -- Ausgabe: 30
print(sum(1, 2, 3, 4, 5))  -- Ausgabe: 15

Der Ausdruck {...} erstellt eine Tabelle, die alle Argumente enthält. Sie können diese mit dem Längenoperator # oder ipairs() durchlaufen.

Probier es selbst

-- Diesen Code nicht ändern --
local numbers = {}
while true do
    local input = io.read()
    if input == nil or input == "" then
        break
    end
    local num = tonumber(input)
    if num then
        table.insert(numbers, num)
    end
end
-------------------------

function calculateAverage(...)
    -- Code hier schreiben
end

local average = calculateAverage(unpack(numbers))
print("Average: " .. average)

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 Logic & Flow