具有依赖于抽象成员的 val 成员的蛋糕模式

Cake pattern with val members which depend on abstract members

所以带上这个特质

trait SomeTrait{
  val x:Int
  val y:Int
  val z=x*y
}

然后这个实现

class SomeImpl extends SomeTrait{
  val x=5
  val y=2
  println(z) //prints 0 why?
}

为什么打印0?我怎样才能避免这种情况!我希望 z 是一个 val,以防它是某种昂贵的计算。

z 必须标记为 lazy valdef

trait SomeTrait{
  val x:Int
  val y:Int
  lazy val z=x*y
}

详细解释参考When to use val or def in Scala traits?