【问题标题】:Lazy evaluations with var使用 var 进行惰性求值
【发布时间】:2017-09-17 04:01:54
【问题描述】:

我知道 lazy val 并且该代码仅在调用时才被评估,但我无法理解惰性和 var 的某些内容。

问题

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

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

它说只有值定义才允许惰性。我在这里有点困惑,不是所有东西都是scala的价值吗?而 var 只是一个关键字 right 和它的类型有什么关系。

【问题讨论】:

标签: scala


【解决方案1】:

首先,一些术语:

  • 关键字val 用于定义“值定义” - 评估一次的定义。
  • 关键字var定义了一个变量,它可以在第一次赋值后改变。
  • 所以当编译器说“惰性修饰符只允许使用值定义”时,这意味着 - 只有val 而不是var 可以跟随lazy 关键字。

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

【讨论】:

  • val 是一个值定义,var 是一个可以改变的变量。我想这对我来说很清楚。是否有任何官方文档可以分享。谢谢。
猜你喜欢
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 2012-10-29
  • 2011-07-14
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多