インスタンス初期化時に複数のスロットを同じ値で埋めたい - lisp-cookbook-ja/common-lisp GitHub Wiki

オブジェクトシステム(CLOS)

インスタンス初期化時に複数のスロットを同じ値で埋めたい

複数のスロットの初期化引数に同じ名前を与えることが可能です。 同名の初期化引数を持つスロットは同じ値で初期化されます。

下記の例では、start、currentスロットの両方に初期化引数名:startを指定しています。

(defclass stopwatch () 
  ((start :initarg :start :reader start-time)
   (current :initarg :start :accessor current-time)))

(let ((obj (make-instance 'stopwatch :start (get-universal-time))))
  (format t "~A ==> ~A~%" (start-time obj) (current-time obj))
  (sleep 3)
  (setf (current-time obj) (get-universal-time))
  (format t "~A ==> ~A~%" (start-time obj) (current-time obj)))

;-> 3437000414 ==> 3437000414
;   3437000414 ==> 3437000417
;=> nil