Next: 14.3 Instance生成
Up: 14 オブジェクト指向機能の実現
Previous: 14.1 クラスの実現
メソッド定義はクラスを表現する構造体のfunctionsスロットに
蓄えられる.
(defmacro defmethod (class-name &rest params&body)
(let
((method-names (mapcar #'car params&body))
(params (mapcar #'cadr params&body))
(bodies (mapcar #'cddr params&body)))
`(progn
(mapcar
#'(lambda (method-name params body)
(define-method
',class-name
method-name
params
body))
',method-names ',params ',bodies)
',class-name)))
;;;
(defun define-method (class-name method-name params body)
(let
((fun `(lambda ,(cons 'self params)
,@body)))
(store-method method-name class-name fun)))
(defun store-method (method-name class-name fun)
(if *verbose*
(format t "; method ~a defined for ~a.~%"
method-name class-name))
(setf (gethash method-name
(class-functions (get-class class-name)))
fun))
generated through LaTeX2HTML. M.Inaba 平成18年5月7日