如题。
我自己尝试了:
(defvar my-functions
'(my-1
my-2
my-3
my-4))
(loop for func in 'my-functions
(advice-add 'save-buffer :after (symbol-name func)))
会出现错误:
Eager macro-expansion failure:
(error "Expected a cl-loop keyword, found (advice-add 'save-buffer :after (symbol-name func))") [2 times]
不知道如何解决,goole 无果。
cireu
2
(cl-loop for func in my-functions
do (advice-add 'save-buffer :after (symbol-name func)))
另外我的评价是不如用 dolist
(dolist (f my-functions)
(advice-add 'save-buffer :after (symbol-name func)))
loop 我只在需要对一个 list 同时执行多个操作(比如过滤再map再过滤之类)时才用, 避免重复迭代一个列表 ,因为 Emacs 没有内置的 lazy iterator 这种 API.
1 个赞
(symbol-name func)
这里是不是有什么问题?
我试了一下你的代码,没有出现
This function has :after advice ...
这样的提示说明 advice 添加成功了。
cireu
4
改成直接用 func
, 不要用 symbol-name, 用了之后就返回一个 string, 就没有作用了
(dolist (f my-functions)
(advice-add 'save-buffer :after func))
(dolist (f my-functions)
(advice-add func :after #'save-buffer))
改成这样就可以了。
顺序反了。谢谢你的建议。