나는 자주 다른 클래스의 목록으로 구성된 클래스가있다. 예를 들어 벡터로 구성된 벡터 목록 클래스를 갖게됩니다. 긴 문장을 쓰는 것을 피하기 위해, 나는 임베디드 클래스에 접근하기위한 메소드를 작성한다. 그러나이 메서드는 getter로만 작동합니다. 슬롯 값을 설정하는 데 사용할 수 없습니다. 메소드를 사용하여 클래스 슬롯 값을 설정하는 방법이 있습니까? 다음은 Common Lisp의 클래스에 대한 게터와 설정자
는 최소한의 예입니다(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
대단히 감사합니다. – audrow