Je voudrais remplacer temporairement une fonction dans un morceau de code.
Prenez, par exemple, ce qui suit:
(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)
Ce qui ne fonctionne pas:
- Cette. Il serait beaucoup plus propre si je pouvais éviter d'activer et de désactiver manuellement les conseils et de faire confiance à la nature à un seul thread d'Emacs pour prendre soin des choses.
cl-letf
ne me laisse pas référencer la fonction d'origine, donc je ne peux pas implémenter des choses qui:filter-args
feraient normalement.cl-flet
ne peut pas remplacer les fonctions dans d'autres fonctions.noflet
est un package externe, que j'aimerais éviter. (Fait également beaucoup plus que ce dont j'ai besoin)
advice
let-binding
local-functions
PythonNut
la source
la source
cl-letf*
à la fois l'let
art.letf*
formulaire pour les deux liaisons.