Anonyme Funktionen
Teil des Abschnitts Logic & Flow der Lua-Journey von Coddy — Lektion 13 von 54.
Da Sie nun verstehen, dass Funktionen in Variablen gespeichert und weitergegeben werden können, gibt es eine noch prägnantere Art, sie zu schreiben. Anstatt einer Funktion immer einen Namen zu geben, können Sie sie direkt dort erstellen, wo Sie sie benötigen – diese werden als anonyme Funktionen bezeichnet.
Eine anonyme Funktion ist einfach eine Funktion ohne Namen. Sie definieren sie mit dem function-Schlüsselwort, gefolgt von ihren Parametern und ihrem Rumpf:
function(a, b)
return a + b
endDies erzeugt einen Funktionswert, der sofort verwendet werden kann. Anonyme Funktionen sind besonders nützlich, wenn Funktionen als Argumente an andere Funktionen übergeben werden. Erinnern Sie sich an das Beispiel zur benutzerdefinierten Sortierung von vorhin? So sieht es mit einer anonymen Funktion aus:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)Anstatt eine separate benannte Funktion für den Vergleich zu definieren, wird die Funktion direkt als zweites Argument für table.sort() erstellt. Dies macht den Code kompakter und behält die Sortierlogik genau dort, wo sie verwendet wird.
Aufgabe
EinfachSchreiben Sie eine Funktion filterByThreshold, die numbers und threshold entgegennimmt und eine neue Tabelle zurückgibt, die nur Zahlen enthält, die größer als der Schwellenwert sind.
Verwenden Sie table.insert() mit einem Ansatz für anonyme Funktionen, um die Zahlen zu filtern. Erstellen Sie die Filterlogik inline, ohne eine separate benannte Funktion zu definieren.
Logik:
- Erstellen Sie eine leere Ergebnistabelle
- Iterieren Sie durch die Tabelle
numbers - Verwenden Sie für jede Zahl eine anonyme Funktion, um zu prüfen, ob sie den Schwellenwert überschreitet
- Wenn die Prüfung true zurückgibt, fügen Sie die Zahl der Ergebnistabelle hinzu
- Geben Sie die gefilterte Ergebnistabelle zurück
Parameter:
numbers(table): Eine Tabelle im Listenstil, die numerische Werte enthältthreshold(number): Der Mindestwert (exklusiv) für die Filterung
Rückgabewert: Eine Tabelle, die nur Zahlen enthält, die größer als der Schwellenwert sind (table)
Spickzettel
Eine anonyme Funktion ist eine Funktion ohne Namen, die mit dem Schlüsselwort function definiert wird, gefolgt von Parametern und einem Funktionskörper:
function(a, b)
return a + b
endAnonyme Funktionen sind nützlich, wenn Funktionen als Argumente übergeben werden, da die Logik direkt dort bleibt, wo sie verwendet wird:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)Dies erstellt die Vergleichsfunktion direkt als Argument für table.sort(), was den Code kompakter macht.
Probier es selbst
function filterByThreshold(numbers, threshold)
-- Schreibe hier den Code
end
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Fortgeschrittene Table-Iteration
Iterieren mit pairs()Iterieren mit ipairs()pairs() vs. ipairs()Zusammenfassung – Charakterbogen4Einführung in Metatables
Was ist eine Metatable?setmetatable & getmetatableDie __index-MetamethodeDie __newindex-MetamethodeDie __tostring-MetamethodeArithmetische Metamethoden Teil 1Arithmetische Metamethoden Teil 2Zusammenfassung – Schreibgeschützte Tabellen7Fortgeschrittene String-Manipulation
string.gsub() für ErsetzungenEinführung in String-Patternsstring.find()string.match()Iterieren mit string.gmatch()Rückblick – Log-File-Parser2Weitere Funktionen der Table-Bibliothek
table.concat()Tabellenerstellung & unpack()table.sort()Benutzerdefiniertes Sortieren mit FunktionenRückblick – Highscore-Tabelle3Fortgeschrittene Funktionskonzepte
Mehrere RückgabewerteVariadische Funktionen (...)Funktionen als First-Class ValuesAnonyme FunktionenWas ist eine Closure?Zusammenfassung – Einfacher Event Handler