Posted 2015-06-03 01:19:14 GMT

なんとなく各処理系のSETF関数/マクロを眺めたりしていましたが、LispWorksには、 (setf method-qualifiers) なんてものが存在するようです。

これは一体何に使うのか利用シーン考えてみましたが、

:before メソッドのつもりで :after を定義

メソッドのつもりで を定義 いやー、うっかり、うっかり、 (setf method-qualifiers) で修正だ

位かなと想像しました。

実際に試してみましょう。

( defmethod foo ( x ) ( print :-------- ) ) ( defmethod foo :after ( x ) ( print :before ) ) (foo 8) (method-qualifiers (find-method #'foo '(:after) (list (find-class T)))) (setf (method-qualifiers (find-method #'foo '(:after) (list (find-class T)))) '(:before)) (method-qualifiers (find-method #'foo '(:before) (list (find-class T)))) (foo 8)

おわかり頂けたでしょうか。

method-qualifiers 内での名前が変わっただけで、 :before が :after メソッドに変わる訳ではないようです。

この状態は、正しいもので上書きすることで修正できます。

( defmethod foo :before ( x ) ( print :before ) ) (foo 8)

一体、 (setf method-qualifiers) は何に使うことを意図しているのか。

更に (setf method-qualifiers) に :after メソッドを定義してメソッドを更新すれば、上記のような修正も可能ではありますが、謎です。

■

