Sto tentando di aggiungere un attributo "messaggio" alla macro del tempo Clojure. Fondamentalmente voglio aggiungere un messaggio personalizzato opzionale all'output del tempo. Sto cercando di trovare un collo di bottiglia nel mio programma e avere dei messaggi descrittivi collegati all'output del tempo sarebbe molto utile.Aggiunta di argomenti facoltativi alla macro
ho provato la seguente:
;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#))
e
(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#)))
Entrambi generano eccezioni. Come faccio a fare questo lavoro?
Sto usando la versione di base, ma per questo caso un messaggio di debug sarà davvero utile per me. C'è un modo migliore per farlo? Forse una specie di macro wrapper? La versione core non accetta solo una singola espressione? – erikcw
@erikcw Sì, hai ragione, la mia versione di base cattiva accetta anche un singolo argomento. ha anche aggiunto una versione con un argomento opzionale –