flet + advice で関数定義が壊れる
flet は advice + 関数定義をぶっこわしちゃうんだよな。
# こういうのあるから elisp の cl が嫌い。
1. 普通に関数定義をしてみる。
(defun hoge () 'default) (hoge) => default
2. 関数定義に advice をくっつける。
(defadvice hoge (around hoge-ad () activate) (setq ad-return-value 'advice)) (hoge) => advice
3. flet で一時的に関数定義を上書きして呼び出し。
(require 'cl) (flet ((hoge () 'flet)) (hoge)) => advice
flet してても advice 断片が呼ばれてる。
4. advice 定義を停めてみる。
(ad-disable-advice 'hoge 'around 'hoge-ad) (ad-activate 'hoge t) (flet ((hoge () 'flet)) (hoge)) => flet
5. あれ?
(hoge) => flet
関数の実体は…
(symbol-function 'hoge) => (lambda nil (block hoge (quote flet)))
なんか advice の使い方違ってるのかな?
割と advice 使うことあるんで、その内 advice 周りのコード読んでみてもいいかなぁ。