【发布时间】:2011-03-03 17:53:18
【问题描述】:
Scala 的一个方便的功能是lazy val,其中val 的评估会延迟到需要时(第一次访问)。
当然,lazy val 必须有一些开销——Scala 必须在某个地方跟踪该值是否已经被评估并且评估必须同步,因为多个线程可能会在第一次尝试访问该值同一时间。
lazy val 的确切成本是多少 - 是否有与 lazy val 关联的隐藏布尔标志来跟踪它是否已被评估,究竟同步了什么以及是否还有更多成本?
另外,假设我这样做:
class Something {
lazy val (x, y) = { ... }
}
这是否与拥有两个单独的lazy vals x 和 y 相同,或者对于 (x, y) 对,我是否只获得一次开销?
【问题讨论】:
标签: performance scala lazy-evaluation