Elisp defadvice周围澄清

时间:2014-02-01 19:16:09

标签: elisp

Documentation for defadvice说:

around-advice is wrapped around the execution of the function

这个解释对我来说并不清楚。所以我决定使用这段代码测试它是如何工作的:

(defun fun ()
  (message "hi"))

(fun)

(defadvice fun (around around-fun activate)
  (message "3"))

(fun)

输出:

hi
3

这里发生了什么?在定义建议后,为什么我看不到“hi”消息?功能是否完全执行?或者执行建议中定义的代码而不是函数?

1 个答案:

答案 0 :(得分:3)

周围意味着建议被执行而不是。 您仍然可以使用ad-do-it调用原始文件。 见info

只是添加一个小例子:

(defun foo (x)
  (* 2 x))

(defadvice foo (around bar activate)
  (setq ad-return-value
        (if (= x 1)
            42
          (+ 1 ad-do-it))))

(foo 1)
;; 42
(foo 2)
;; 5
(foo 3)
;; 7