Я не уверен, что использую ad-get-args и ad-get-arg right.
Например, следующий код не работает.
(defun my-add (a b)
(+ a b))
(defadvice my-add (after my-log-on activate)
(message "my-add: %s" (ad-get-args)))
(my-add 1 2)
Последнее выражение вызывает ошибку:
Debugger entered--Lisp error: (void-function ad-get-args).
Следующее также не работает.
(defun my-substract (a b)
(- a b))
(defadvice my-substract (around my-log-on activate)
(message "my-substract: %s" (ad-get-arg 0))
(ad-do-it))
(my-substract 10 1)
Defadvice выдает предупреждение:
Warning: `(setq ad-return-value (ad-Orig-my-substract a b))' is a malformed
function
И последнее выражение выдает ошибку:
Debugger entered--Lisp error: (invalid-function (setq ad-return-value (ad-Orig-my-substract a b)))
(setq ad-return-value (ad-Orig-my-substract a b))()
Я пытался использовать defadvice для просмотра аргументов запуска процесса в целях отладки, и я обнаружил, что мой способ использования ad-get-arg не работает.
Обновление: ответ,
Из ответов получается, что я должен был использовать (ad-get-args 0)
вместо (ad-get-args)
в (defadvice my-add ..)
, и я должен был использовать ad-do-it
вместо (ad-do-it)
в (defadvice my-substract ..)
.
И лучше использовать trace-function
.