SUBJ。 类似的东西:
(lexical-let (oldf #'original-func)
(flet ((original-func (arg)
do-something
(funcall oldf arg)))
do-something))
不起作用:(
答案 0 :(得分:1)
希望这会帮助您使用语法,调用swap-function调用foo1但执行foo2。
你可以把它写成一个有用的宏with-replace-function,它在执行你传入的体时将旧函数与new函数绑定。
(defun foo1()
(insert "hi foo1"))
(defun foo2()
(insert "hi foo2"))
(defun swap-function(old new)
(let ((save-func (symbol-function old)))
(fset old (symbol-function new))
(funcall old)
(fset old save-func)))
(swap-function #'foo1 #'foo2)
答案 1 :(得分:1)
emacs-lisp中没有读取器宏,您需要使用
明确地symbol-function
。
(defun test-1 (x)
(message "base test %s" x))
(let ((old-test-1 (symbol-function 'test-1))
(z 10))
(flet ((test-1 (y)
(funcall old-test-1 y)
(message "extended test %s" y)))
(nic-test-1 z)))
如果您想将其用作闭包,则需要使用lexical-let
代替let
或将lexical-binding
设置为T
。