Добавление необязательного аргумента в макрос

Я пытаюсь добавить параметр "сообщение" к макросу времени Clojure. В основном я хочу добавить необязательное настраиваемое сообщение к выводу времени. Я пытаюсь найти узкое место в своей программе, и мне было бы очень полезно прикрепить некоторые описательные сообщения к выходным данным времени.

Я пробовал следующее:

;optional argument
(defmacro time
  "Evaluates expr and prints the time it took.  Returns the value of
 expr."
  {:added "1.0"}
  [expr & msg]
  `(let [start# (. System (nanoTime))
         ret# ~expr]
     (prn (str "Elapsed time: " (/ (double (- (. System (nanoTime)) start#)) 1000000.0) " msecs. " (first ~msg)))
     ret#))

и

(defmacro time
  "Evaluates expr and prints the time it took.  Returns the value of
 expr."
  {:added "1.0"}
  ([expr] (time expr ""))
  ([expr msg]
  `(let [start# (. System (nanoTime))
         ret# ~expr]
     (prn (str "Elapsed time: " (/ (double (- (. System (nanoTime)) start#)) 1000000.0) " msecs. " ~msg))
     ret#)))

Оба вызывают исключения. Как мне это сделать?

5
задан erikcw 20 August 2011 в 19:18
поделиться