Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
lua [2024/05/02 13:03] root [Allgemein] |
lua [2024/05/26 17:30] (aktuell) root [Funktionen] |
||
---|---|---|---|
Zeile 369: | Zeile 369: | ||
* Parameter die beim Aufruf nicht übergeben werden, bekommen nil als Wert | * Parameter die beim Aufruf nicht übergeben werden, bekommen nil als Wert | ||
* Parameter die zu viel übergeben werden werden ohne Fehler verworfen | * Parameter die zu viel übergeben werden werden ohne Fehler verworfen | ||
+ | * Funktionen sind First-Class-Values | ||
+ | * sie können also wie strings, int usw. Variablen zugewiesen werden | ||
+ | * technisch gesehen function < | ||
* Funktionen müssen mit Funktionsname() aufgerufen werden | * Funktionen müssen mit Funktionsname() aufgerufen werden | ||
* die Klammern müssen also zwingend angegeben werden | * die Klammern müssen also zwingend angegeben werden | ||
Zeile 424: | Zeile 427: | ||
+ | ** Named Arguments: ** | ||
+ | |||
+ | * gibt es nicht | ||
+ | * kann durch tables (man übergibt eine Table) simuliert werden | ||
+ | |||
+ | |||
+ | ** Anonyme Funktionen/ | ||
+ | |||
+ | * man kann einfach keinen Namen angeben | ||
+ | * der Name nach " | ||
+ | |||
+ | |||
+ | <sxh lua> | ||
+ | function dosomething(f, | ||
+ | f(parameter) | ||
+ | end | ||
+ | |||
+ | dosomething(function (string) print(string) end, " | ||
+ | </ | ||
+ | |||
+ | * dosomething erwartet in diesem Beispiel als ersten Parameter f und als zweiten Parameter einen Parameter den es der Funktion übergibt | ||
+ | * ' | ||
+ | * letztendlich wird die anonyme Funktion aufgerufen und gibt " | ||
+ | |||
+ | |||
+ | ===== Closure ===== | ||
+ | |||
+ | * Funktionen in anderen Funktionen haben Zugriff auf die Variablen der sie umgebenden Funktion | ||
+ | * der Zugriff und die Werte bleiben bestehen, auch wenn der Scope der sie umgebenden Funktion nicht mehr existiert | ||
+ | * im Prinzip bekommt die Unterfunktion eine Kopie der Variablen der sie umgebenden Funkion | ||
+ | * im Prinzip kann man es vergleichen mit einem Objekt, dessen Methode Zugang zu den Funktionen eben des Objektes hat | ||
+ | |||
+ | |||
+ | <sxh lua> | ||
+ | function outer(base) | ||
+ | local result = base * 5 | ||
+ | inner = function() | ||
+ | print(result) | ||
+ | end | ||
+ | return inner | ||
+ | end | ||
+ | |||
+ | bla = outer(6) | ||
+ | bla() | ||
+ | </ | ||
+ | |||
+ | * gibt 30 aus | ||
+ | * inner wird zurückgegeben, | ||
====== Begriffe/ | ====== Begriffe/ | ||