2014-11-01 35 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))) 
相關問題