我有计时功能:
def time[R](code: => R, t: Long = System.currentTimeMillis()) =
(code, System.currentTimeMillis() - t )
它返回代码返回值的元组,以及代码执行所需的时间。
我具有跨多个对象计时的各种特性:
trait TimingStats {
var step1Time, step2Time, step3Time : Long
}
我有一个对象在做我想做的事情:
class Process extends TimingStats {
var (step1Result, step1Time) = time(Thread.sleep(1000))
var (step2Result, step2Time) = time(Thread.sleep(2000))
var (step3Result, step3Time) = time(Thread.sleep(3000))
}
(当然,Thread.sleep
实际上是有用的代码,而不仅仅是睡眠指令)
但是,这不起作用,编译器失败,提示“变量step1Time需要'override'修饰符”。
我实际上应该如何尝试呢?
PS-更大的背景是,我随后将这些统计信息报告给Prometheus,作为应用程序监视的一部分,以防您打算建议各种分析工具。
答案 0 :(得分:2)
问题不在于元组,问题在于您不能用可变值覆盖不可变值。将var
替换为val
,它将编译。