Saya ingin sementara menimpa fungsi dalam sepotong kode.
Ambil, misalnya, yang berikut ini:
(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)
Apa yang tidak berhasil:
- Ini. Akan jauh lebih bersih jika saya bisa menghindari secara manual mengaktifkan dan menonaktifkan saran dan mempercayai sifat single-threaded Emacs untuk mengurus hal-hal.
cl-letf
tidak akan membiarkan saya referensi fungsi asal, jadi saya tidak bisa mengimplementasikan hal-hal yang:filter-args
biasanya dilakukan.cl-flet
tidak dapat mengesampingkan fungsi di fungsi lain.noflet
adalah paket eksternal, yang ingin saya hindari. (Juga melakukan lebih dari yang saya butuhkan)
advice
let-binding
local-functions
PythonNut
sumber
sumber
cl-letf*
untuk keduanyalet
.letf*
formulir untuk kedua binding.