Scala 如何在元组分配中混合使用本地和重写成员

Scala 如何在元组分配中混合使用本地和重写成员,scala,overriding,traits,Scala,Overriding,Traits,我有一个定时功能: def time[R](code: => R, t: Long = System.currentTimeMillis()) = (code, System.currentTimeMillis() - t ) 它返回代码返回值的元组,以及代码执行所用的时间 我在多个对象中计时的各种事情都有一个特点: trait TimingStats { var step1Time, step2Time, step3Time : Long } 我有一个目标做我正在计时的事

我有一个定时功能:

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))
}
(当然,
线程.sleep
实际上是有用的代码,而不仅仅是一个sleep指令)

但是,这不起作用,因为编译器失败了“变量step1Time需要'override'修饰符”

我该怎么做呢


PS-更大的背景是,作为应用程序监视的一部分,我将向Prometheus报告这些统计数据,以防您建议使用各种分析工具。

问题不在于元组,而在于您不能用可变值覆盖不可变值。用
val
替换
var
,它将被编译。

您不能用
var
覆盖
val
。为什么希望步骤结果和步骤时间是可变的?已更新。匹配时会出现不同的编译问题。谢谢啊,可变性不是必需的,但这是我正在尝试做的其他事情的副作用。更新后的代码为我编译并运行。@Narfanator最好自己运行示例代码,这样您就可以确定它演示了您在实际代码中看到的相同问题。已修复。不同的问题。