我有以下功能:
(def elapsedtime (with-out-str (time (run-my-function))))
我想知道是否可以只存储时间的整数值,因为我现在只能存储一个字符串....
有什么建议吗? 非常感谢
更新
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)传递给:main $ fn - 105 $ nsecs”
答案 0 :(得分: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#)))
答案 1 :(得分:0)
DefMacro解决方案对我不起作用,所以我使用了这个过滤解决方案:
(filter #(#{\0,\1,\2,\3,\4,\5,\6,\7,\8,\9,\.} %) my-double-number)
返回的值正是我想要的。无论如何,谢谢您的建议和时间。 Chers