| Andreas Rozek |
|
Lua_04 - Tag-Methoden für numerische OperatorenWerden in einem Lua-Programm arithmetische Operatoren auf nicht-numerische Operanden angewandt, so führt dies zum Aufruf einer passenden Tag-Methode (sofern definiert, ansonsten kommt es zum Abbruch des Programmes). "Lua_04" nutzt diesen Mechanismus, um einen neuen numerischen Datentyp zu definieren, dessen Instanzen wie Werte vom Typ "number" in arithmetischen Ausdrücken eingesetzt werden können. Ähnlich wie in der Programmiersprache Python [2,3] werden dazu für jeden binären Operator zwei verschiedene Methoden angelegt - je eine für den Fall, daß der linke Operand (bzw. beide Operanden) oder nur der rechte Operand nicht-numerisch (präziser: von einem bestimmten Datentyp) ist. Als Demonstrationsobjekt müssen - wie so oft in vergleichbaren Situationen - die komplexen Zahlen herhalten: "Lua_04" definiert (mit den von "Lua_03" her bekannten Mechanismen) eine "Klasse" namens "Complex" mit Methoden für die Grundrechenarten sowie Potenzierungs- und Vergleichsoperationen und trägt diese als Tag-Methoden für die zugehörigen Lua-Operatoren ein. "Lua_04" wird ohne Angabe von Kommandozeilen-Argumenten aufgerufen lua Lua_04.lua und liefert folgende Ausgabe: Lua_04 - experiments with tag-methods for numeric operators
complex numbers:
a = 1.0+i*1.0 = 1+i*1
b = 2.0 = 2
c = i*3.0 = 0+i*3
basic operators:
-a = -1-i*1
-c = 0-i*3
a+b = 3+i*1
a+c = 1+i*4
a-b = -1+i*1
a-c = 1-i*2
a*b = 2+i*2
a*c = -3+i*3
a/b = 0.5+i*0.5
a/c = 0.3333333333333333-i*0.3333333333333333
Die Programmausgabe wird zweckmäßigerweise in Verbindung mit dem zugehörigen Quelltext analysiert und verdeutlicht die korrekte Funktion der zuvor beschriebenen Funktionen und Methoden. QuelltextDas Programm steht im Quelltext zur Verfügung:
Damit die innerhalb von "Lua_04.lua" definierten Funktionen auch in anderen Beispielen eingesetzt werden können, können sie als eigene Skript-Datei heruntergeladen werden:
Literaturhinweise
|
| http://www.Andreas-Rozek.de/Lua/Acquainting/Lua_04.html | (letzter Stand: 14.04.2002) |