2014-11-01 2 views
7

मैं अपने init.el में एक convinience defun है कुछ लॉगिंग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 & बाकी मापदंडों तुतलाना करना जो मैं सोचा कि मैं इस तरह उपयोग कर सकता हूं:

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

(log4me 3 "Hello %ust!" 1) 

जो प्रारूप प्रारूप के बाद "प्रारूप विनिर्देशक तर्क प्रकार से मेल नहीं खाता" त्रुटि में पुन: उपयोग करता है रैम वास्तव में (1) नहीं है और नहीं 1.

क्या log4elisp defun में प्रारूप पैरामीटर को शामिल करने का एक अच्छा तरीका है और उन्हें प्रारूप सामान्य कॉल पैरामीटर में "सामान्य" पैरामीटर (एक सूची नहीं) के रूप में आने का कोई अच्छा तरीका है?

+3

देखने के समारोह लागू –

+0

@Rainer Joswig धन्यवाद! मुझे लगा कि मुझे बस इतना आवश्यक था कि दस्तावेज में सही बिंदु पर एक सूचक था। आवेदन अच्छी तरह से काम किया। क्या आप एक संक्षिप्त उत्तर देना चाहते हैं ताकि मैं इसे स्वीकार कर सकूं? – Matthias

उत्तर

5

आपको क्या करना होगा apply है:

(defun log4me (level logmsg &rest formatparams) 
    "Log message." 
    (interactive) 
    (when (<= level log4elisp::loglevel) 
    (apply #'message logmsg formatparams))) 
संबंधित मुद्दे