Anonyme Funktionen
Teil des Abschnitts Logik & Programmablauf der Lua-Journey von Coddy. Lektion 13 von 54.
Da du nun verstanden hast, dass Funktionen in Variablen gespeichert und weitergegeben werden können, gibt es eine noch prägnantere Möglichkeit, sie zu schreiben. Anstatt einer Funktion immer einen Namen zu geben, kannst du sie direkt dort erstellen, wo du sie benötigst. Diese werden anonyme Funktionen genannt.
Eine anonyme Funktion ist einfach eine Funktion ohne Namen. Du definierst sie mit dem Schlüsselwort function, unmittelbar gefolgt von ihren Parametern und ihrem Rumpf:
function(a, b)
return a + b
endDies erstellt einen Funktionswert, der sofort verwendet werden kann. Anonyme Funktionen sind besonders nützlich, wenn Funktionen als Argumente an andere Funktionen übergeben werden. Erinnerst du dich an das Beispiel für benutzerdefiniertes Sortieren 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)Statt eine separate benannte Funktion für den Vergleich zu definieren, wird die Funktion direkt als zweites Argument für table.sort() erstellt. Dadurch wird der Code kompakter, und die Sortierlogik bleibt direkt dort, wo sie verwendet wird.
Aufgabe
EinfachSchreibe 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.
Verwende table.insert() mit einem Ansatz mit einer anonymen Funktion, um die Zahlen zu filtern. Erstelle die Filterlogik inline, ohne eine separate benannte Funktion zu definieren.
Logik:
- Erstelle eine leere Ergebnistabelle
- Iteriere durch die Zahlentabelle
- Verwende für jede Zahl eine anonyme Funktion, um zu prüfen, ob sie den Schwellenwert überschreitet
- Wenn die Prüfung true zurückgibt, füge die Zahl der Ergebnistabelle hinzu
- Gib 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ückgabe: Eine Tabelle, die nur Zahlen enthält, die größer als der Schwellenwert sind (table)
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 Logik & Programmablauf
1Fortgeschrittene Tabelleniteration
Iterieren mit pairs()Iterieren mit ipairs()pairs() vs. ipairs()Zusammenfassung – Charakterbogen2Weitere Funktionen der Tabellenbibliothek
table.concat()Tabellenkonstruktion & unpack()table.sort()Eigene Sortierung mit FunktionenRückblick – Highscore-Tabelle3Fortgeschrittene Funktionskonzepte
Mehrere Werte zurückgebenVariadische Funktionen (...)Funktionen als Werte erster KlasseAnonyme FunktionenWas ist eine Closure?Rückblick – Einfacher Event-HandlerÜbe selbstständig: Online-Lua-Compiler