Lisp.クラスとインスタンス(Classes and Instances)

665 ワード

構造(structures)を作成するには、defstructを呼び出して構造の形式を計画し、make-pointのような関数を使用して作成する2つのステップが必要です.インスタンスの作成にも同様の2つのステップが必要です.まずdefclassを使用してクラスを定義します.
(defclass circle ()
  (radius center))

この定義はcircleの各インスタンスにradiusとcenterという構造内のフィールドfieldのような2つのスロット(slots)があるということです.
このクラスのインスタンスを作成するには、指定した関数ではなく汎用make-instance関数を呼び出し、クラス名を最初のパラメータとして渡します.
[7]> 
(setf c (make-instance 'circle))
#<CIRCLE #x000348F69C38>

このインスタンスのスロットを設定するには、setfとslot-valueを使用して共同で完了します.
[8]> (setf (slot-value c 'radius) 1)
1

構造フィールドと同様に、初期化されていないスロットは未定義です.