Andreas Rozek Lesehinweise letzte Änderungen Gästebuch-Eintrag Mitteilungen an den Autor  English Version  zur Leitseite zum vorherigen Thema zum nächsten Thema  zur ersten Seite zur vorherigen Seite zur nächsten Seite

Lua_02 - Ersetzen "intrinsischer" Funktionen

In "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.

Quelltext

Das 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

[1] Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes
Reference Manual of the Programming Language Lua 4.0
(siehe http://www.lua.org/manual)
das Referenzhandbuch enthält alle wesentlichen Informationen zur Sprache selbst, den zugehörigen Standardbibliotheken und der Schnittstelle zur Laufzeitumgebung;

Haftungsausschluß

Bitte beachten Sie auch den Haftungsausschluß des Autors!

http://www.Andreas-Rozek.de/Lua/Acquainting/Lua_02.html    (letzter Stand: 14.04.2002)