def
在当前命名空间中定义了一个全局变量。并且用全局变量来计时一个函数调用可能不是一个好主意。例如,假设你想测量调用 (+ 1 2)
。你可以使用 let
来计时(与 def
不同),并使用 println
打印花费的时间,如下所示
(let [start (System/nanoTime)
ret (+ 1 2)
end (System/nanoTime)]
(println (str "Elapsed time: " (- end start) " ns"))
ret)
clojure.core/time
将这个特性变成一个宏(有一个不同,它会以毫秒为单位打印出花费的时间)。所以上面的代码等同于 (time (+ 1 2))
。查看 (source time)
以了解它是如何实现的。