同じスロットに読み書きできるアクセサと読み出し専用のアクセサをつけたい - lisp-cookbook-ja/common-lisp GitHub Wiki
同じスロットに読み書きできるアクセサと読み出し専用のアクセサをつけたい
defclassの定義で一つのスロットに複数のアクセサを記述することが可能です。 また、総称関数を別に定義することでも可能です。
(defclass foo ()
((x :initform 42
:accessor foo-accessor
:reader foo-reader)))
(defparameter *obj* (make-instance 'foo))
(foo-reader *obj*)
;=> 42
(setf (foo-accessor *obj*) 100)
(foo-accessor *obj*)
;=> 100
(setf (foo-reader *obj*) 200)
;-> error The function (SETF FOO-READER) is undefined.