2014-11-01 39 views
7

我有一个舒适defun定义在我init.el做一些记录如何将&rest参数传递给emacs lisp中的另一个函数?

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

(defun log4me (level logmsg) 
    "Log message." 
    (interactive) 
    (when (>= level log4elisp::loglevel) 
    (message logmsg)))) 

这样的工作,但不知何故,我经常做

(log4me somelevel (format "mymessage with %d" 1)) 

所以我发现的Emacs Lisp &其余参数我想我可能会使用这样的:

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

(log4me 3 "Hello %ust!" 1) 

这resuslts到“格式说明不匹配参数类型”错误,因为formatpa RAM是实际上(1)而不是1.

有没有一种很好的方式将格式参数包含到log4elisp defun中,并使它们以format参数(不是单个列表)的形式到达格式函数调用?

+3

看到的功能应用于 – 2014-11-01 18:20:50

+0

@Rainer Joswig谢谢!我感觉我所需要的只是指向文档中正确的一点。申请运作良好。你想提供一个简短的答案,以便我可以接受它吗? – Matthias 2014-11-01 18:25:42

回答

5

你需要的是apply

(defun log4me (level logmsg &rest formatparams) 
    "Log message." 
    (interactive) 
    (when (<= level log4elisp::loglevel) 
    (apply #'message logmsg formatparams))) 
相关问题