2014-11-01 22 views
7

BenEmacs lisp'de argümanları başka bir işleve nasıl geçirirsiniz?

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

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

Bu biraz çalışır bazı günlük kaydını yapmak benim init.el bir convinience defun var ama nedense ben sık

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

Yani ben emacs & dinlenme parametreleri peltek bulundu yapmak hangi i ben böyle kullanıyor olabilir düşünce:

formatpa beri "Format belirleyici argüman türü eşleşmiyor" yanılgıya resuslts
(defun log4me (level logmsg &rest formatparams) 
    "Log message." 
    (interactive) 
    (when (<= level log4elisp::loglevel) 
    (message (format logmsg formatparams)))) 

(log4me 3 "Hello %ust!" 1) 

rams gerçekte (1) ve değil 1.

Biçim parametrelerini log4elisp defun içine dahil etmenin ve biçimlendirme fonksiyonu çağrısına "normal" parametrelere (tek bir liste değil) ulaşmasını sağlamanın iyi bir yolu var mı?

+3

fonksiyon –

+0

@Rainer Joswig Teşekkür GEÇERLİ bakın! İhtiyacım olan her şeyin belgelerindeki doğru noktaya bir işaret olduğunu hissettim. iyi çalıştı. Kabul edebilmek için kısa bir cevap vermek ister misiniz? – Matthias

cevap

5

İhtiyacın apply geçerli:

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