2007/08/30

[Common Lisp] メソッドを削除する

CLOS でメソッドを削除するには find-method でメソッドを検索し、remove-method でジェネリックファンクションから検索したメソッドを削除します。

(defclass a ()
())

(defmethod foo ((a a) arg)
(declare (ignore arg))
(format t " foo primary.~%"))

(defmethod foo :before ((a a) arg)
(declare (ignore arg))
(format t "foo before."))

(foo (make-instance 'a) "arg") ; foo before. foo primary.

(let* ((generic-function (symbol-function 'foo))
(method (find-method generic-function
'(:before) (list (find-class 'a) t))))
(remove-method generic-function method))

(foo (make-instance 'a) "arg") ; foo primary.

0 件のコメント: