首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加消息不起作用

添加消息不起作用
EN

Stack Overflow用户
提问于 2016-04-07 12:55:12
回答 1查看 123关注 0票数 0
代码语言:javascript
复制
(defun my-message (format-string &rest args)
  (apply 'message
         (concat "my-message: " format-string)
         args))

(my-message "abc %d" 123)
;; ==> "my-message: abc 123"
(message "abc %d" 123)
;; ==> "abc 123"

(advice-add 'message :around 'my-message)
;;(advice-remove 'message 'my-message)

advice-addmessage之后,将发出错误Wrong type argument: sequencep, #<subr message>信号。有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-09 04:24:30

由于您使用的是:around通知,所以您的my-message函数将原始函数作为其第一个参数。您的代码缺少这个参数,而是将第一个参数作为消息格式字符串处理。更改my-message以指定附加参数:

代码语言:javascript
复制
(defun my-message (orig-fun format-string &rest args)
  (apply orig-fun
         (concat "my-message: " format-string)
         args))

然后这些建议就会像预期的那样起作用。注意这个版本是如何调用orig-fun而不是硬编码'message作为apply目标的。

不过,对于这种情况,您不需要:around建议。您所做的只是修改格式字符串,因此您可以使用:filter-args,它允许您在参数传递给原始函数之前修改它们。下面是一个适用于您的案例的示例:

代码语言:javascript
复制
(defun my-message (args)
  (nconc (list (concat "my-message: " (car args))) (cdr args)))
(advice-add 'message :filter-args #'my-message)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36476845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档