Next: 15.4 Instance生成
Up: 15 CLOSのクラスシステムの実現
Previous: 15.2 クラス定義の実現
メソッド定義はクラスを表現する構造体のfunctionsスロットに
蓄えられます.
(defmacro defmethod* (method-name param-list &rest body)
(let* ((cls-name (cadr (car param-list)))
(params (cons (caar param-list)
(cdr param-list))))
`(define-method ',cls-name
',method-name ',params ',body)))
(defun define-method (cls-name method-name params body)
(let ((fun `(lambda ,params ,@body)))
(store-method method-name cls-name fun))
(create-generic-function method-name))
(defun store-method (method-name cls-name fun)
(if *verbose*
(format t "; method ~a defined for ~a.~%"
method-name cls-name))
(setf (gethash method-name
(cls-functions (get-class cls-name)))
fun)
)
(defun create-generic-function (method-name)
(setf
(symbol-function method-name)
(eval
`(function
(lambda (self &rest params)
(apply
(find-method* ',method-name
(send self 'class))
(cons self params)))))))
generated through LaTeX2HTML. M.Inaba 平成18年5月6日