使用var进行延迟评估

时间:2017-09-16 19:40:43

标签: scala

我知道((A & B) & C) & D并且只有在调用代码时才会对代码进行评估,但我无法理解lazy和var的某些内容。

问题

  • 为什么lazy只允许使用val而不是var?
  • 在intellij中,抛出以下错误

我正在使用的Scala版本:Scala 2.12.0

lazy val error

它表示只允许使用值定义进行延迟。我在这里有点困惑,scala中的一切都不值得吗?和var只是一个关键词,它与该类型有什么关系。

1 个答案:

答案 0 :(得分:3)

首先,一些术语:

  • 关键字val用于定义"值定义" - 评估一次的定义。
  • 关键字var定义变量,可在首次分配值后进行更改。
  • 因此,当编译器说'#34; lazy修饰符只允许使用值定义"时,就意味着 - 只有val而不是var可以跟随lazy关键词。

为什么Scala不支持lazy var? 我猜测将var标记为懒惰不会很好地定义:懒惰地评估什么 - 仅限第一个作业?每一项任务?并且重新分配是否会计入先前作业的触发器?可能还存在一些实现问题(例如,我们如何确保在计算先前值时未分配变量?)。