我在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中,并使它们作为"普通"参数(不是单个列表)在格式函数调用中到达?
你需要的是apply:
(defun log4me (level logmsg &rest formatparams)
"Log message."
(interactive)
(when (<= level log4elisp::loglevel)
(apply #'message logmsg formatparams)))
Run Code Online (Sandbox Code Playgroud)