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/04/22 22:25]
root [numerische for-Schleife]
lua [2024/05/26 17:30] (aktuell)
root [Funktionen]
Zeile 2: Zeile 2:
 Ende von Statements/Instruktionen wird automatisch erkannt, es können also mehrere auf einer Zeile stehen ohne Trennzeichen oder Zeilenumbruch. Ende von Statements/Instruktionen wird automatisch erkannt, es können also mehrere auf einer Zeile stehen ohne Trennzeichen oder Zeilenumbruch.
  
 +
 +===== Allgemein =====
 +
 +  * am Verbeitetsten ist Lua 5.1
 +  * alle Versionen nach 5.1 -> 5.2, 5.3, 5.4 sind jeweils nicht abwärtskompatibel 
 +      * z.B erzeugt ... in einer Funktionsdeklaration in 5.1 eine Tabelle arg, in 5.4 mus ... an eine Tabelle übergeben werden um eine Tabelle zu bekommen
 +      * in 5.1 gibt es eine Funktion unpack zum entpacken von Tabellen, in 5.4 ist unpack eine Methode von table -> table.unpack()
 +
 +
 +  * Einführung: https://www.lua.org/pil/5.3.html
  
 ====== Keywords/Onboard-Funktionen ====== ====== Keywords/Onboard-Funktionen ======
Zeile 341: Zeile 351:
  
  
 +===== break =====
 +
 +  * Bricht aus einer Schleife aus
 +
 +
 +===== return =====
 +
 +  * Bricht aus einer Funktion aus
 +  * gibt am Ende einer Funktion Werte an den Aufrufer zurück
 +      * sollen am Ende einer Funktion keine Werte zurückgeben werden braucht kein return angegeben werden
 +
 +
 +===== Funktionen =====
 +
 +  * Keyword function
 +  * Parameter sind lokale Variablen
 +  * Parameter die beim Aufruf nicht übergeben werden, bekommen nil als Wert
 +  * 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
 +      * die Klammern müssen also zwingend angegeben werden
 +      * Ausnahme es gibt nur einen Parameter der ein literal String ist oder eine table
 +
 +<sxh lua>
 +function myfunction(param1, param2)
 +      somecode
 +end
 +
 +myfunction("a")
 +</sxh>
 +
 +
 +  * param2 wurde in obigem Beispiel beim Aufruf der Funktion nicht übergeben und hätte in der Funktion den Wert nil
 +
 +
 +**Rückgabewerte**
 +
 +  * Funktionen können mehr als 1 Return-Value haben
 +  * sind mehr Variablen als Rückgabewerte vorhanden, wird mit nil aufgefüllt
 +  * Default-Rückgabewert = nil
 +
 +<sxh lua>
 +function somefunction()
 +    return "return1", "return2"
 +end
 +
 +somefunction()
 +a = somefunction()
 +b, c = somefunction()
 +d, e, f = somefunction()
 +</sxh>
 +
 +
 +
 +**Variable Anzahl Paramater**
 +
 +  * per "..." kann angegeben werden das eine unbestimmte Menge Parameter übergeben werden kann
 +      * entspricht Pythons *args
 +  * die Werte befinden sich anschließend in der Tabelle arg
 +
 +<sxh lua>
 +function my(param1, ...)
 +    print(param1)
 +    print(unpack(arg))
 +end
 +
 +my(1,2,3,4,5)
 +</sxh>
 +
 +  * gibt 1 und auf einer neuen Zeile 2,3,4.5 aus
 +  * unpack entpackt eine Tabelle (wie * in Python)
 +  * arg ist die Tabelle die die zusätzlichen Parameter enthält
 +
 +
 +** Named Arguments: **
 +
 +  * gibt es nicht
 +  * 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.1713817513.txt.gz · Zuletzt geändert: 2024/04/22 22:25 von root