Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
|
lua [2024/04/28 21:03] root [Funktionen] |
lua [2024/05/26 17:30] (aktuell) root [Funktionen] |
||
|---|---|---|---|
| Zeile 2: | Zeile 2: | ||
| Ende von Statements/ | Ende von Statements/ | ||
| + | |||
| + | ===== 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: | ||
| ====== Keywords/ | ====== Keywords/ | ||
| Zeile 359: | 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 398: | Zeile 411: | ||
| * per " | * per " | ||
| * entspricht Pythons *args | * entspricht Pythons *args | ||
| - | * ... kann anschließend an eine Table übergeben werden und diese enthält dann die Werte | + | * die Werte befinden sich anschließend in der Tabelle arg |
| <sxh lua> | <sxh lua> | ||
| function my(param1, ...) | function my(param1, ...) | ||
| - | | + | |
| - | | + | print(unpack(arg)) |
| - | | + | |
| - | end | + | |
| end | end | ||
| + | |||
| + | my(1, | ||
| </ | </ | ||
| + | * 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/ | ||
| + | |||
| + | * 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/ | ||