簡體   English   中英

我需要做一些特別的事情才能使用clojure.core / time嗎?

[英]Do I need to do something special to use clojure.core/time?

我正在調用clojure.core / time,記錄為“Evaluates expr並打印它所花費的時間。返回expr的值”

例如:

(time (expensive))

宏展開它表明它確實將值存儲為let,因此在輸出時應該立即返回let表達式中的值。

然而,當我使用昂貴的計算進行呼叫時,我看到延遲然后得到時間,但是必須等待很長時間(有時+10秒或更長時間)才能顯示結果。

誰能解釋一下這里發生了什么?

PS:這是使用clojure 1.3.0,如果這有任何區別。

也許你正在返回一些懶惰的東西,其中的元素僅在送入REPL時生成? 在這種情況下,您可能希望將其包裝在一個迫使所有元素生成的dorun中。

如果您能提供昂貴計算的詳細信息,我們可以看出這是否屬實。

來自Savanni D'Gerinel評論的有用補充:

正確的語法可能是(time (doall (computation)))如果你想返回結果和(time (dorun (computation)))如果你不想。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM