2014-02-01 2 views
3

Documentation for defadvice говорит:Elisp 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 

Что здесь происходит? Почему я не вижу сообщение «привет» после определения рекомендации? Выполняется ли вообще функция? Или вместо функции используется код, определенный в рекомендации?

ответ

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 
Смежные вопросы