2014-11-01 18 views
7

Tôi có một defun convinience trong init.el của tôi để làm một số khai thác gỗLàm thế nào để vượt qua và phần còn lại đối số cho một chức năng khác trong emacs lisp?

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

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

Nó loại hoạt động nhưng bằng cách nào đó tôi thường xuyên làm

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

Vì vậy, tôi tìm thấy Emacs Lisp & thông số còn lại mà tôi nghĩ rằng tôi có thể sử dụng như thế này:

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

(log4me 3 "Hello %ust!" 1) 

mà resuslts thành "Định dạng specifier không phù hợp với loại đối số" lỗi kể từ formatpa rams là thực sự (1) và không 1.

Có cách nào tốt để bao gồm các tham số định dạng vào log4elisp defun và làm cho chúng đến trong chức năng định dạng gọi là tham số "bình thường" (không phải một danh sách)?

+3

thấy chức năng ÁP DỤNG –

+0

@Rainer Joswig Cảm ơn! Tôi có cảm giác rằng tất cả những gì tôi cần là một con trỏ đến đúng điểm trong tài liệu. áp dụng làm việc tốt. Bạn có muốn cung cấp một câu trả lời ngắn để tôi có thể chấp nhận nó? – Matthias

Trả lời

5

gì bạn cần là apply:

(defun log4me (level logmsg &rest formatparams) 
    "Log message." 
    (interactive) 
    (when (<= level log4elisp::loglevel) 
    (apply #'message logmsg formatparams))) 
Các vấn đề liên quan