【发布时间】:2016-08-20 05:43:52
【问题描述】:
我经常有一个由另一个类的列表组成的类。例如,我将有一个由向量组成的向量列表类。为了避免编写长语句,我编写了一个访问嵌入式类的方法。但是,此方法仅充当 getter;我不能用它来设置槽值。有没有办法使用方法来设置类槽值?
下面是一个最小的例子:
(defclass vector ()
((name :accessor vector-name
:initarg :name)))
(defclass vector-list ()
((vectors :accessor vector-list-vectors
:initarg :vectors)))
(defun make-vector-list ()
(make-instance 'vector-list
:vectors (list
(make-instance 'vector :name 'v1)
(make-instance 'vector :name 'v2))))
(defmethod access-vector-name ((vt vector-list) vector-idx)
(vector-name (nth vector-idx (vector-list-vectors vt))))
;; returns V1
(print (access-vector-name (make-vector-list) 0))
;; Now, trying to set the same slot returns an error
;; How can I set the slot?
(setf (access-vector-name (make-vector-list) 0) 'new); --> error
【问题讨论】:
标签: oop lisp common-lisp setter clos