Benutzer-Werkzeuge

Webseiten-Werkzeuge


lua

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
lua [2024/05/04 15:44]
root [Funktionen]
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 <Name> weißt den Code der Variable <Name> zu
   * 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 428: Zeile 431:
   * gibt es nicht   * gibt es nicht
   * kann durch tables (man übergibt eine Table) simuliert werden   * kann durch tables (man übergibt eine Table) simuliert werden
 +
 +
 +** Anonyme Funktionen/Lambda **
 +
 +  * man kann einfach keinen Namen angeben
 +  * der Name nach "function" ist nur die Zuweisung an eine Variable
 +
 +
 +<sxh lua>
 +function dosomething(f, parameter)
 +    f(parameter)
 +end
 +
 +dosomething(function (string) print(string) end, "hello")
 +</sxh>
 +
 +  * dosomething erwartet in diesem Beispiel als ersten Parameter f und als zweiten Parameter einen Parameter den es der Funktion übergibt
 +  * 'function (string) print(string) end' übergibt eine anonyme Funktion (ohne Namen) beim Funktionsaufruf
 +  * letztendlich wird die anonyme Funktion aufgerufen und gibt "hello" zurück
 +
 +
 +===== 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()
 +</sxh>
 +
 +  * gibt 30 aus
 +  * inner wird zurückgegeben, hat aber (noch) Zugriff auf die Variablen seiner (nicht mehr existierenden) Eltern-Funktion outer
 ====== Begriffe/Konzepte ====== ====== Begriffe/Konzepte ======
  
lua.1714830291.txt.gz · Zuletzt geändert: 2024/05/04 15:44 von root