我尝试用lazy val
trait MyTrait {
lazy val something: Int
}
object SomeThing extends MyTrait {
override lazy val something: Int = 42
}
然后我在MyTrait
中遇到编译错误。我想知道为什么scala不允许我们在特征中定义lazy val
?我们如何在特征中定义lazy val
?
答案 0 :(得分:4)
lazy
仅在调用时指示该值的计算。
当您要访问something
的值时,不是MyTrait.something
会被调用,而是类中扩展该特性的那个属性。就你而言
SomeThing.something
。
您可以将lazy
保留在扩展类中。
特征仅定义必要的变量-需要覆盖的功能