如何将参数传递给emacs lisp中的另一个函数?

Mat*_*ias 9 emacs elisp

我在init.el中有一个方便的定义来做一些日志记录

(defvar log4me::loglevel 5
  "Global loglevel.")

(defun log4me (level logmsg)
  "Log message."
  (interactive)
  (when (>= level log4elisp::loglevel)
    (message logmsg))))
Run Code Online (Sandbox Code Playgroud)

它有点工作,但不知怎的,我经常这样做

  (log4me somelevel (format "mymessage with %d" 1))
Run Code Online (Sandbox Code Playgroud)

所以我发现了emacs lisp&rest参数,我认为我可能会这样使用:

(defun log4me (level logmsg &rest formatparams)
  "Log message."
  (interactive)
  (when (<= level log4elisp::loglevel)
    (message (format logmsg formatparams))))

(log4me 3 "Hello %ust!" 1)
Run Code Online (Sandbox Code Playgroud)

由于formatparams实际上是(1)而不是1,因此重新分析为"格式说明符与参数类型不匹配"错误.

有没有一种很好的方法可以将格式参数包含到log4elisp defun中,并使它们作为"普通"参数(不是单个列表)在格式函数调用中到达?

sds*_*sds 7

你需要的是apply:

(defun log4me (level logmsg &rest formatparams)
  "Log message."
  (interactive)
  (when (<= level log4elisp::loglevel)
    (apply #'message logmsg formatparams)))
Run Code Online (Sandbox Code Playgroud)