Je m'amusais à ajouter quelques conseils à une fonction:
(advice-add 'executable-find :around
(lambda (f &rest args)
(apply g args)))
;;; ^
Aïe, une faute de frappe. Corrigé et évalué à nouveau le code ci-dessus. Mais maintenant, j'ai les deux, les conseils "corrigés" et "cassés" autour de cette fonction.
Comment puis-je m'en débarrasser? Étant donné qu'il a advice-remove
besoin de l'objet fonction ou du conseil autour (qui est vide ici)?
(Évidemment, je peux simplement quitter et redémarrer, mais il y a une autre façon, n'est-ce pas?)
eq
les précédentes, (2) Advice-Remove comparerait la fonction que vous lui transmettez aux conseils jusqu'à ce qu'elle trouve celui qui esteq
à lui et à supprimer cela, (3) même si Advice-Remove a utilisé un test différent, commeequal
, cela ne fonctionnerait toujours pas, car différentes évaluations d'une forme lambda ne se feraient pasequal
mutuellement. Il s'avère que (1) est correct, mais (2) et (3) sont faux: conseils-supprimer les utilisationsequal
, et les évaluerlambda
deux fois donne desequal
résultats!Il y a
advice-mapc
, qui nous permet d'itérer sur tous les conseils d'une fonction, en appliquant une fonction donnée à chacun. Avec lui, il est facile de supprimer tous les conseils:Cela pourrait être étendu pour supprimer uniquement les conseils qui n'ont pas de
name
propriété en recherchant dans le secondprops
argument () (qui est une liste) ceux qui n'ont rien associé à la cléname
.la source
name
facilite le retrait.Voici du code pour vous aider à faire exactement cela, de manière interactive.
Cela définit deux fonctions. La première fonction obtient la liste de tous les conseils sur un symbole donné, la seconde fonction demande de manière interactive un symbole et un conseil sur ce symbole, puis supprime ce dernier du premier. Comme tout cela se produit à la fin, il est plus facile (pour moi) que de copier-coller l'expression lambda.
la source