让我从Emacs Lisp: How to use ad-get-arg and ad-get-args?
中取出修改后的例子(defun my-add (a b &optional c)
(+ a b)
(unless c
(setq c 4)))
(defadvice my-add (after my-log-on (a b &optional c) activate)
(message "my-add a: %s" a)
(message "my-add: %s" c))
(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
正文中使用未提供的可选参数(或更一般地说,原始函数中的变量)?
答案 0 :(得分:1)
由于来自(setq c 4)
的{{1}}改变了环境,而没有给出参数,我认为你无法得到你想要的东西。
我最好的选择是使用特殊变量:
my-add
答案 1 :(得分:1)
一般情况下,你不能。 defadvice
(以及新的advice-add
)旨在为代码添加功能,但不允许您访问其内部。