一个 defmethod 形成一个 通用功能 如果没有。
defmethod
CL-USER 7 > (defclass animal () ((sound :initarg :sound :initform "no sound"))) #<STANDARD-CLASS ANIMAL 40200ED09B>
请记住:新值首先出现在 SETF功能 。这是由Common Lisp标准定义的。
CL-USER 8 > (defmethod (setf make-sound) (value (the-animal animal)) (setf (slot-value the-animal 'sound) value)) #<STANDARD-METHOD (SETF MAKE-SOUND) NIL (T ANIMAL) 40200F098B> CL-USER 9 > (let ((dog (make-instance 'animal))) (setf (make-sound dog) "bark") dog) #<ANIMAL 402002187B> CL-USER 10 > (slot-value * 'sound) "bark"
似乎工作。
在 defclass 该 :accessor slot选项定义它定义一个reader方法以及一个相应的方法 setf方法 使用正确的参数列表:首先是新值,然后是该类的实例。
defclass
:accessor