You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Emacs中如何用advice-add将无参函数绑定到带参函数上

解决方案

报错根因

Emacs 的 :after 类 advice 默认会将原函数的所有入参完整传递给 advice 函数,当 advice 函数参数列表长度与原函数不匹配时,就会触发参数数量错误。

通用实现方案

无需修改无参函数的定义,仅需在添加 advice 时用匿名函数包装一层,忽略所有传入参数即可:

绑定到 my/test-a 的写法

(advice-add 'my/test-a :after (lambda (&rest _) (my/test-b)))

绑定到 find-file 的写法

(advice-add 'find-file :after (lambda (&rest _) (my/test-b)))

说明

&rest _ 会捕获所有传递给 advice 的参数,下划线是 Elisp 约定的无用变量标识,包装层直接调用无参的 my/test-b 即可完全规避参数不匹配问题。该写法对原函数的入参数量、调用方式(交互/编程调用)没有要求,通用性强。

内容的提问来源于stack exchange,提问作者randouser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:06:10