Tôi đang cố gắng thêm thuộc tính "thông báo" tùy chọn vào macro thời gian Clojure. Về cơ bản tôi muốn thêm một tin nhắn tùy chỉnh tùy chọn vào đầu ra của thời gian. Tôi đang cố gắng tìm một nút cổ chai trong chương trình của tôi và có một số thông điệp mô tả gắn liền với đầu ra của thời gian sẽ rất hữu ích.Thêm đối số tùy chọn vào macro
Tôi đã thử những điều sau đây:
;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#))
và
(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#)))
Cả hai trường hợp ngoại lệ ném. Làm cách nào để tôi thực hiện công việc này?
Tôi đã sử dụng phiên bản lõi, tuy nhiên đối với trường hợp này là một thông điệp debug sẽ thực sự hữu ích cho tôi. Có cách nào tốt hơn để làm điều này? Có lẽ một số loại wrapper macro? Không phải là phiên bản lõi chỉ chấp nhận một biểu hiện duy nhất là tốt? – erikcw
@erikcw Có bạn là đúng phiên bản lõi xấu của tôi cũng chấp nhận một đối số duy nhất. cũng đã thêm một phiên bản với một đối số tùy chọn –