- Offizieller Beitrag
Hi,
meine Aktivitäten im OOP Bereich sind eher bescheiden. Ich schreibe ja viele Erweiterungen für SciTE in Lua. Dort kann ich mit Objekten arbeiten. Nun habe ich eine grundlegende Frage, die nicht sprachbezogen ist, sondern sich eher grundsätzlich auf das Objektverständnis bezieht:
Kann ich der Property eines Objektes den Aufruf einer Methode desselben Objektes zuweisen?
Ich habe mal ein fiktives Bsp. erstellt, das mein Problem verdeutlicht:
Spoiler anzeigen
-- Mein Objekt "calc": Property "val" und Methoden "double", "half", "pow2", "sqrt"
local calc = {
val = 0,
double = function(self) self.val = self.val*2 return self.val end,
half = function(self) self.val = self.val/2 return self.val end,
pow2 = function(self) self.val = math.pow(self.val, 2) return self.val end,
sqrt = function(self) self.val = math.sqrt(self.val) return self.val end,
}
-- Wert setzen
calc.val = 12
-- verdoppeln, Wert ausgeben
print('verdoppelt', calc:double() )
-- halbieren, Wert ausgeben
print('halbiert', calc:half() )
-- Quadrat bilden, Wert ausgeben
print('quadriert', calc:pow2() )
-- Quadratwurzel ziehen, Wert ausgeben
print('2te Wurzel', calc:sqrt() )
--[[ Output
verdoppelt 24
halbiert 12
quadriert 144
2te Wurzel 12
]]
Alles anzeigen
Das funktioniert also wie gewollt.
Da die Methoden aber kein Argument erfordern würde ich den Funktionsaufruf gerne an Properties zuweisen.
Also in der Form: "HALF = calc:half()"
Somit hätte ich statt des Aufrufs "calc:half()" den Aufruf "calc.HALF".
Aber im Objekt selbst kann ich so nicht auf andere Methoden dieses Objekts zugreifen. "calc" wird mir dann als unbekannter Globaler Index markiert. Dasselbe passiert bei Verwendung von "self".
Erlauben Objekte überhaupt solche Re-Referenzierung und falls ja: Wie müsste ich syntaktisch vorgehen?
..Oder versuche ich hier die Quadratur des Kreises?
P.S. Es geht mir nicht darum, wie man es anders lösen könnte (Lösungen habe ich dafür), sondern ob es so realisierbar ist oder nicht.