 
 
 
 
 
   
 Next: 15.2 クラス定義の実現
Up: 15 CLOSのクラスシステムの実現
 Previous: 15 CLOSのクラスシステムの実現
 
クラスを表現するために構造体を用います.
構造体の要素にはクラスを表現するために必要なデータを蓄えるための
ものを用意しておきます.
ここでは,クラスの名前(name),インスタンス変数(local-variables),メソッ
ド表(functions),親クラス(parent)があります.
 
(defstruct cls
  (name nil)
  (local-variables nil)
  (accessors nil)
  (functions (make-hash-table))
  (parents nil))
;;;
(defvar *all-classes* nil)
(defvar *verbose* t)
;;;
(defun initialize-cls-system ()
  (if *all-classes* (clrhash *all-classes*)
    (setf *all-classes* (make-hash-table)))
  (setf (gethash t *all-classes*) (make-cls :name t)))
;;;
;;;
(initialize-cls-system)
;;;
クラスを定義するdefclassが行なうことは,クラスの構造体データをひとつ作
り,それを大域変数*all-classes*に代入されているハッシュ表にクラス名を
キーにして蓄えます.
クラス名を与えて,クラスが定義されているかを調べる関数defined-class?,
クラス名とクラスの実体を登録する関数store-class
クラス名をあたえて,クラスの実体を取り出す関数get-classは以下のように
なる.
 
(defun defined-class? (cls-name)
  (gethash cls-name *all-classes*))
;;;
(defun store-class (cls-name class)
  (if *verbose*
      (format t "; class ~a defined under ~a.~%"
              cls-name (cls-parents class)))
  (setf (gethash cls-name *all-classes*) class)
  )
(defun get-class (cls-name)
  (cond
   ((gethash cls-name *all-classes*))
   (t (error "~a is an undefined class" cls-name))))
 
generated through LaTeX2HTML. M.Inaba 平成18年5月6日