Ich möchte steuern, wie die Werte in Steckplätzen gespeichert werden und was zurückgegeben wird, wenn ich einen Steckplatz lese. Hier ist meine Klassendefinition:Common Lisp: Wie man Slot Accessoren übersteuert?
(defclass object()
((name :accessor name-access
:initform 'noname
:initarg :name)
(value :accessor value-access
:initform 10
:initarg :value)))
ich das Objekt auf diese Weise erstellen:
(setf obj1 (make-instance 'object))
Dies ist die Art und Weise ist, wie ich den Wert des Schlitzes erhalten name
:
(name-access obj1)
Und wie Ich setze einen neuen Wert:
(setf (name-access obj1) 'realname)
Was ist der richtige Weg, um diese Accessor-Funktion (oder Methode) zu überschreiben, um einige Änderungen am Objekt vornehmen zu können (beim Schreiben) und um den zurückgegebenen Wert zu steuern?
Vielen Dank.
Danke. Es scheint, dass es in einigen Gemeinschaften als ein besserer Weg angesehen wird, als den Accessor neu zu definieren. Aber ist es möglich, den Rückgabewert mit ': before' oder': around' Methoden zu ändern? –
@ andrei-n: siehe Beispiel. Die around-Methode gibt zurück, was sie will. Die Vorher-Methode hat keinen Einfluss. –
@ andrei-n Das Ändern des Rückgabewerts in einer Um-Methode birgt die Gefahr, dass später Unterklassen Probleme verursachen. Eine primäre Methode kann immer überschrieben werden, wenn ein anderes Verhalten erforderlich ist, aber es gibt keine einfache Möglichkeit, eine Um-Methode loszuwerden. Persönlich würde ich sagen, dass vor/um/nach-Methoden gut sind, wenn Sie einer vorhandenen Methode zusätzliche Funktionalität hinzufügen müssen, aber für die Kernfunktionalität sollte eine primäre Methode bevorzugt werden. – jkiiski