Ich hatte Spaß daran, einer Funktion einige Ratschläge hinzuzufügen:
(advice-add 'executable-find :around
(lambda (f &rest args)
(apply g args)))
;;; ^
Autsch, ein Tippfehler. Es wurde behoben und der obige Code erneut ausgewertet. Aber jetzt habe ich sowohl den "korrigierten" als auch den "kaputten" Rat bezüglich dieser Funktion.
Wie werde ich diese los? Vorausgesetzt, dass advice-remove
entweder das Funktionsobjekt oder der Around-Rat benötigt (der hier leer ist)?
(Natürlich kann ich einfach beenden und neu starten, aber es gibt noch einen anderen Weg, oder?)
eq
mit den vorherigen übereinstimmt, (2) das Entfernen von Ratschlägen die Funktion vergleicht, die Sie an die Ratschläge übergeben, bis sie gefunden wird eine, die dazu gehörteq
und das entfernt, (3) selbst wenn ein Ratschlag-Entfernen einen anderen Test verwendet,equal
würde es immer noch nicht funktionieren, weil sich verschiedene Bewertungen einer Lambda-Form nichtequal
gegenseitig würden . Es stellt sich heraus, dass (1) richtig ist, aber (2) und (3) falsch sind: Ratschläge entfernenequal
undlambda
zweimal bewerten, führt zuequal
Ergebnissen!Es gibt eine
advice-mapc
, die alle Ratschläge einer Funktion durchläuft und auf jede eine bestimmte Funktion anwendet. Damit ist es einfach, alle Ratschläge zu entfernen:Dies könnte erweitert werden, um nur Hinweise zu entfernen, die keine
name
Eigenschaft haben, indem im zweiten (props
) Argument (das eine Liste ist) nach solchen gesucht wird, denen nichts mit dem Schlüssel verknüpft istname
.quelle
name
von erleichtert das Entfernen.Hier ist ein Code, der Ihnen dabei hilft, interaktiv zu arbeiten.
Dies definiert zwei Funktionen. Die erste Funktion erhält die Liste aller Hinweise zu einem bestimmten Symbol, die zweite Funktion fragt interaktiv nach einem Symbol und einem Hinweis zu diesem Symbol und entfernt dann das letztere aus dem ersteren. Da dies alles mit der Fertigstellung geschieht, ist es (für mich) einfacher als das Einfügen des Lambda-Ausdrucks zu kopieren.
quelle