defadvice相比advice-add有何不足?

所以啊,老的写法早该废弃,新的写法清晰易懂。

我画个时序图来说明 before 和 around 的区别,以及为什么 before(或 after)无必要修改参数:

              +-------+          +------+
              | Emacs |          | User |
              +-------+          +------+
                  |                 |
                  |                 |
(funcall ad@before a b)             |
                  | --------------> |
                  |              (defun ad@before (a b)
                  |                ...)
                  | <-------------- |
  (funcall orig-fn a b)             |
                  |                 |
                  |                 |
                  v                 v


              +-------+          +------+
              | Emacs |          | User |
              +-------+          +------+
                  |                 |
                  |                 |
(funcall ad@around orign-fn a b)    |
                  | --------------> |
                  |              (defun ad@around (orig-fn a b)
                  |                (funcall orig-fn a b))
                  | <-------------- |
                  |                 |
                  |                 |
                  v                 v
9 个赞