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

时间:2016-11-11 23:02:10

标签: scala default traits

所以采取这个特性

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,以防它是一种昂贵的计算。

1 个答案:

答案 0 :(得分:3)

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?