Emacs defadvice可以在原始函数中使用变量吗?
让我来举一个修改后的例子Emacs defadvice可以在原始函数中使用变量吗?,emacs,elisp,advising-functions,defadvice,Emacs,Elisp,Advising Functions,Defadvice,让我来举一个修改后的例子 (my add 1 2 3)将与输出一起运行良好: my-add a: 1 my-add: 3 但是(my add 1 2)无法从原始函数中获取c值: my-add a: 1 my-add: nil 我的问题是如何使用defadvice正文中未提供的可选参数(或者更一般地说,原始函数中的变量)因为(setq c 4)fromMy add更改了环境,而不是给定的参数,我认为您无法得到想要的 我的最佳选择是使用特殊变量遵循以下丑陋的方式: (defvar *specia
(my add 1 2 3)
将与输出一起运行良好:
my-add a: 1
my-add: 3
但是(my add 1 2)
无法从原始函数中获取c
值:
my-add a: 1
my-add: nil
我的问题是如何使用defadvice
正文中未提供的可选参数(或者更一般地说,原始函数中的变量)因为(setq c 4)
fromMy add
更改了环境,而不是给定的参数,我认为您无法得到想要的
我的最佳选择是使用特殊变量遵循以下丑陋的方式:
(defvar *special*)
(defun my-add (a b &optional c)
(+ a b)
(unless c
(setq c 4)
(setq *special* 4)))
(defadvice my-add (after my-log-on (a b &optional c) activate)
(message "my-add a: %s" a)
(if (null c)
(message "my-add *special*: %s" *special*)
(message "my-add: %s" c)))
一般来说,你不能
defadvice
(以及新的advice add
)设计用于在函数周围添加代码,但不允许您访问其内部
(defvar *special*)
(defun my-add (a b &optional c)
(+ a b)
(unless c
(setq c 4)
(setq *special* 4)))
(defadvice my-add (after my-log-on (a b &optional c) activate)
(message "my-add a: %s" a)
(if (null c)
(message "my-add *special*: %s" *special*)
(message "my-add: %s" c)))