| Andreas Rozek |
|
Lua_02 - Ersetzen "intrinsischer" FunktionenIn "Lua_02" wird versucht, einige der von "Lua_01" gefundenen intrinsischen Funktionen durch Benutzer-definierte Funktionen zu ersetzen. Das konkrete Ziel ist, die eingebauten Funktionen print und tostring um die Fähigkeit zur Verarbeitung von Tabellen zu erweitern. Zusätzlich wird eine globale Funktion encodedString eingeführt, die etwaige in Zeichenketten enthaltene Sonderzeichen durch die dazu passenden Fluchtsymbole ersetzt - auf diese Weise wird verhindert, daß diese Sonderzeichen bei ihrer Ausgabe auf stdout irgendwelche unerwünschten Seiteneffekte auslösen. Das Programm ist nicht sonderlich schwierig zu verstehen - am kompliziertesten ist wohl die Behandlung von Tabellen und Listen innerhalb der Funktion tostring: besitzt die beim Aufruf mitgegebene Tabelle eine eigene Funktion bzw. Methode namens tostring oder toString, so übernimmt diese die Umwandlung in eine Zeichenkette (da die Tabelle/Liste selbst als erstes und einziges Argument an die gefundene Funktion übergeben wird, spielt die Unterscheidung zwischen Funktion und Methode keine Rolle). Ansonsten wird die Tabelle - je nach internem Aufbau - unter Zuhilfenahme der introspektiven Fähigkeiten von Lua als Liste oder Tabelle (im engeren Sinne) in die resultierende Zeichenkette geschrieben. Listen werden durch Aufzählung ihrer Elemente (in aufsteigender Reihenfolge der Indices), Tabellen als Folge von Schlüssel-Wert-Paarungen ausgegeben. Schlüssel werden direkt kodiert, Werte (auch von Listen-Elementen) dagegen durch rekursiven Aufruf von tostring. Damit der rekursive Aufruf nicht zu Endlosschleifen führt, ist die Verschachtelungstiefe auf toString_DefaultNestLevel (derzeit 4) Ebenen beschränkt. "Lua_02" wird ohne Angabe von Kommandozeilen-Argumenten aufgerufen lua Lua_02.lua und liefert folgende Ausgabe: Lua_02 - replaces intrinsic functions with user-defined ones
PI = 3.141592653589793
_INPUT = (userdata)
_ALERT = (function)
Complex = {im=0,re=0}
Vector = {1,2,3}
Special = {["a non-symbolic key"]="a\nspecial\0\"value\"\127",innerTable={1,2,3}}
{} = {}
{n=0} = {}
Die Programmausgabe wird zweckmäßigerweise in Verbindung mit dem zugehörigen Quelltext analysiert - wer sich in Lua ein wenig auskennt, wird dabei keine Überraschungen erleben. QuelltextDas Programm steht im Quelltext zur Verfügung:
Da die innerhalb von "Lua_02.lua" definierten Funktionen auch in anderen Beispielen eingesetzt werden sollen, können sie als eigene Skript-Datei heruntergeladen werden:
Literaturhinweise
|
| http://www.Andreas-Rozek.de/Lua/Acquainting/Lua_02.html | (letzter Stand: 14.04.2002) |