所以啊,老的写法早该废弃,新的写法清晰易懂。
我画个时序图来说明 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