next up previous
Next: 12.4 スーパクラス Up: 12 オブジェクト指向プログラミング Previous: 12.2 クラス,メソッド,スロットアクセス

12.3 スロットの属性設定

クラスを宣言する時に,スロットの属性を指定する ことができる.

> (defclass foo () 
   ((a :accessor foo-a :initarg :a :initform 1)
    (b :accessor foo-b :initarg :b)
    (c :accessor foo-c :initform 3)))

 #<STANDARD-CLASS FOO 244020371>

> (setq foo1 (make-instance 'foo :a 'one :b 'two))
 #<FOO 36325624>
> (slot-value foo1 'a)
ONE
> (foo-a foo1)
ONE
> (slot-value foo1 'b)
TWO
> (foo-b foo1)
TWO
> (slot-value foo1 'c)
3
> (foo-c foo1)
3
> (setf (slot-value foo1 'a) 'uno)
UNO
> (slot-value foo1 'a)
UNO
> (setf (foo-b foo1) 20)
20
> (slot-value foo1 'b)
20
:accessorというのは,インスタンス変数へアクセスするための 関数名を指定するためのもので, :initformはインスタンス変数の初期値を与えるためのものです. :initargは,make-instanceの引数として初期値を与える場合の キーワードです.

generated through LaTeX2HTML. M.Inaba 平成18年5月6日