我正在使用metrics-scala库,并且无法理解为什么下面两个调用的行为完全不同
// method 1
writeTimer.time(() => {
// expensive operation
})
// method 2
writeTimer.time {
// expensive operation
}
在方法1的情况下,从不调用昂贵的操作,而在方法2中,它是。
writeTimer
是com.yammer.metrics.Timer
的一个实例,其中time
方法声明为:
/**
* Runs f, recording its duration, and returns the result of f.
*/
def time[A](f: => A): A
我刚刚在我的代码中解决了一个错误,我必须使用方法2来使其工作。
答案 0 :(得分:8)
在我看来,在第一种情况下,你正在计算声明一个计算昂贵操作的函数的操作,而在第二种情况下,你实际上正在计算昂贵的操作本身。< / p>