Shammer's Philosophy

My private adversaria

CLOSエクササイズ第04回

かなり前回から間があいてしまっているが、再び書く機会があったので。インスタンスの初期化の方法について。具体的には initform と initarg の使い方を簡単にメモ。まずは initform から。

? (defclass foo ()
((a :accessor accessor-a :initform "Hello")))
#<STANDARD-CLASS FOO>
? (setf aaa (make-instance 'foo))
#<FOO #x30200103689D>
? (accessor-a aaa)
"Hello"

次に initarg の使い方。initarg はキーワード引数にしないと機能しなかった。

? (defclass bar ()
((b :accessor accessor-b :initform "Hey!" :initarg k)))
#<STANDARD-CLASS BAR>
? (make-instance 'bar)
#<BAR #x30200102B45D>
? (accessor-b (make-instance 'bar))
"Hey!"
? (setf bbb (make-instance 'bar k 3000))
> Error: Unbound variable: K
...
? 
? 
? (defclass bar ()
((b :accessor accessor-b :initform "Hey!" :initarg :k)))
#<STANDARD-CLASS BAR>
? (setf bbb (make-instance 'bar :k 3000))
#<BAR #x30200105FCAD>
? (accessor-b bbb)
3000
?