defadvice可以在原始函数中使用变量吗?

时间:2012-12-04 07:49:08

标签: emacs elisp advising-functions defadvice

让我从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正文中使用未提供的可选参数(或更一般地说,原始函数中的变量)?

2 个答案:

答案 0 :(得分:1)

由于来自(setq c 4)的{​​{1}}改变了环境,而没有给出参数,我认为你无法得到你想要的东西。

我最好的选择是使用特殊变量:

my-add

答案 1 :(得分:1)

一般情况下,你不能。 defadvice(以及新的advice-add)旨在为代码添加功能,但不允许您访问其内部。