Dobrze się bawiłem, dodając kilka rad do funkcji:
(advice-add 'executable-find :around
(lambda (f &rest args)
(apply g args)))
;;; ^
Eee, literówka. Naprawiono to i ponownie oceniono powyższy kod. Ale teraz mam zarówno „poprawione”, jak i „zepsute” porady dotyczące tej funkcji.
Jak się ich pozbyć? Biorąc pod uwagę, że advice-remove
potrzebujesz albo obiektu funkcji, albo porady wokół (która tutaj jest pusta)?
(Oczywiście mogę po prostu wyjść i uruchomić ponownie, ale jest inny sposób, prawda?)
eq
poprzednią, (2) usuń poradę porówna funkcję, którą przekażesz, do porad, aż znajdzie jeden, który jesteq
do tego i usuń to, (3) nawet jeśli polecenie remove-remove zastosuje inny test, na przykładequal
, nadal nie zadziała, ponieważ różne oceny formy lambda nie będą sięequal
nawzajem. Okazuje się, że (1) jest poprawne, ale (2) i (3) są błędne: usuń poradyequal
i zastosuj tę samą ocenęlambda
dwukrotnieequal
!