Clojure zaman makrosuna bir seçenek "ileti" özniteliği eklemeye çalışıyorum. Temel olarak, zamanın çıkışına isteğe bağlı bir özel mesaj eklemek istiyorum. Programımda bir darboğaz bulmaya çalışıyorum ve zamanın çıktısına bağlı bazı açıklayıcı mesajlar çok yararlı olacaktır.Makroya isteğe bağlı değişken ekleme
;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#))
ve
(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#)))
Hem istisnalar atar:
aşağıdaki denedim. Bu işi nasıl yaparım?
, ancak bu durum için bir hata ayıklama mesajı benim için gerçekten yararlı olacaktır. Bunu yapmanın daha iyi bir yolu var mı? Belki bir çeşit sarıcı makrosu? Çekirdek sürümü sadece tek bir ifadeyi kabul etmiyor mu? – erikcw
@erikcw Evet haklısınız, benim kötü çekirdekli versiyonum da tek bir argümanı kabul ediyor. ayrıca isteğe bağlı bir argümana sahip bir versiyon ekledi –