所以采取这个特性
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,以防它是一种昂贵的计算。
答案 0 :(得分:3)
z
必须标记为lazy val
或def
trait SomeTrait{
val x:Int
val y:Int
lazy val z=x*y
}
有关详细说明,请参阅When to use val or def in Scala traits?