我想控制将值保存在插槽中的方式以及读取插槽时返回的内容。这是我的班级定义:
(defclass object ()
((name :accessor name-access
:initform 'noname
:initarg :name)
(value :accessor value-access
:initform 10
:initarg :value)))
我以这种方式创建对象:
(setf obj1 (make-instance 'object))
这是我获取广告位值的方式name
:
(name-access obj1)
以及我如何设置新值:
(setf (name-access obj1) 'realname)
为了重写对象(写时)并控制返回值,重写该访问器函数(或方法)的正确方法是什么?
谢谢你。
您可以手动定义获取和设置插槽的方法:
(defclass foo ()
((name :initform 'noname
:initarg :name)))
(defgeneric name-access (foo)
(:method ((foo foo))
(format t "~&Getting name.~%")
(slot-value foo 'name)))
(defgeneric (setf name-access) (name foo)
(:method (name (foo foo))
(format t "~&Setting a new name.~%")
(setf (slot-value foo 'name) name)))
(defparameter *foo* (make-instance 'foo))
(name-access *foo*)
; Getting name.
;=> NONAME
(setf (name-access *foo*) 'some-name)
; Setting a new name.
;=> SOME-NAME
(name-access *foo*)
; Getting name.
;=> SOME-NAME
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句