2012-04-05 47 views
0

我有以下功能:是否有可能將Elapsed Time函數轉換爲Integer?

(def elapsedtime (with-out-str (time (run-my-function)))) 

,我想知道是否可以只存儲時間的整數值,因爲我只能存放在目前的String ....

任何建議? 非常感謝

UPDATE

So I did use this: 
    (defmacro nsecs 
    [expr] 
    `(let [start# (. System (nanoTime))] 
    ~expr 
    (- (. System (nanoTime)) start#))) 

然後修改這個:

(def elapsedtime (nsecs (run-my-function argument1 argument2))) 

但不工作,我究竟做錯了什麼?

「異常在線程 」AWT-EventQueue的-0「 java.lang.IllegalArgumentException異常:ARGS(1)傳遞到的錯誤數量:主$ FN - $ 105納秒」

+0

我看到你對nsecs的定義與Jan's不同。也許你應該嘗試使用Jan的。這個對我有用。 – user100464 2012-04-05 23:22:31

+0

我也試過他的版本,但沒有任何改變。問題在於參數的數量。即使我做了「(def elapsedtime(nsecs(+ 1 1)))」它不起作用....奇怪 – nuvio 2012-04-05 23:33:42

+0

你在什麼環境中運行它?你可以從命令行啓動一個REPL,而不使用Clojure代碼的其餘部分,並檢查宏是否有同樣的問題? – user100464 2012-04-06 00:20:32

回答

0

的DefMacro解決方案並沒有爲我工作,所以我用這個過濾方案:

(filter #(#{\0,\1,\2,\3,\4,\5,\6,\7,\8,\9,\.} %) my-double-number) 

返回的值正是我想要的。無論如何,感謝您的建議和時間。 Chers

2

相反提取這個值的一串,讓我們來看看time macro的來源。

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

將它用作返回數納秒的新宏的基礎,用於評估給定表達式。

(defmacro nsecs 
    [expr] 
    `(let [start# (. System (nanoTime))] 
    ~expr 
    (- (. System (nanoTime)) start#))) 
+0

嗨,感謝您的建議,但我現在有這個錯誤:「線程中的異常」AWT-EventQueue-0「java.lang.IllegalArgumentException:錯誤數量的參數(1)傳遞給:main $ fn - 105 $ nsecs 「你能看看更新的問題嗎?無論如何,非常感謝 – nuvio 2012-04-05 22:49:57

相關問題