为什么scala不允许在特征中定义惰性值?

时间:2019-06-05 13:55:11

标签: scala

我尝试用lazy val

定义一个特征
   trait MyTrait {
     lazy val something: Int
   }

   object SomeThing extends MyTrait {
     override lazy val something: Int = 42
   }

然后我在MyTrait中遇到编译错误。我想知道为什么scala不允许我们在特征中定义lazy val?我们如何在特征中定义lazy val

1 个答案:

答案 0 :(得分:4)

懒惰的特质是没有道理的。 lazy仅在调用时指示该值的计算。

当您要访问something的值时,不是MyTrait.something会被调用,而是类中扩展该特性的那个属性。就你而言 SomeThing.something

您可以将lazy保留在扩展类中。

特征仅定义必要的变量-需要覆盖的功能