Ich möchte eine Funktion in einem Codeteil vorübergehend überschreiben.
Nehmen Sie zum Beispiel Folgendes:
(defun nadvice/load-quiet (args)
(cl-destructuring-bind
(file &optional noerror nomessage nosuffix must-suffix)
args
(list file noerror t nosuffix must-suffix)))
(defun nadvice/idle-require-quiet (old-fun &rest args)
(advice-add 'load :filter-args #'nadvice/load-quiet)
(apply old-fun args)
(advice-remove #'load #'nadvice/load-quiet))
(advice-add 'idle-require-load-next :around #'nadvice/idle-require-quiet)
Was geht nicht:
- Dies. Es wäre viel sauberer, wenn ich vermeiden könnte, den Rat manuell zu aktivieren und zu deaktivieren, und darauf vertrauen könnte, dass sich Emacs um alles kümmert.
cl-letf
Ich kann die ursprüngliche Funktion nicht referenzieren, daher kann ich keine Dinge implementieren,:filter-args
die normalerweise funktionieren würden.cl-flet
Funktionen in anderen Funktionen können nicht überschrieben werden.noflet
ist ein externes Paket, das ich vermeiden möchte. (Tut auch viel mehr als ich brauche)
advice
let-binding
local-functions
PythonNut
quelle
quelle
cl-letf*
für beidelet
.letf*
Formular für beide Bindungen verwendet.