2014-11-01 8 views
7

Ho un defun comodità nel mio init.el fare qualche registrazioneCome passare e riposare argomenti su un'altra funzione in emacs lisp?

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

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

E 'sorta di opere, ma in qualche modo ho spesso fanno

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

Così ho trovato l'Emacs Lisp & parametri di riposo che ho pensato che avrei potuto utilizzare in questo modo:

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

(log4me 3 "Hello %ust!" 1) 

che resuslts in "di formato non corrisponde tipo di argomento" errore dal formatpa rams è in realtà (1) e non 1.

C'è un buon modo per includere i parametri di formato nel defun log4elisp e farli arrivare nella chiamata della funzione di formato come parametri "normali" (non una singola lista)?

+3

vedere la funzione APPLICA –

+0

@Rainer Joswig Grazie! Avevo la sensazione che tutto ciò di cui avevo bisogno fosse un puntatore al punto giusto nella documentazione. si applica bene. Ti piace fornire una risposta breve in modo che io possa accettarlo? – Matthias

risposta

5

Quello che vi serve è apply:

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