Scala的一个便利功能是lazy val,a的评估val被延迟到必要时(首次访问时).
当然,lazy val必须有一些开销 - 在某处Scala必须跟踪该值是否已经被评估并且评估必须同步,因为多个线程可能会尝试同时第一次访问该值.
a的成本到底是什么?lazy val是否有一个隐藏的布尔标志与a关联,lazy val如果它已经被评估,是什么同步,是否有更多的成本?
另外,假设我这样做:
class Something {
lazy val (x, y) = { ... }
}
Run Code Online (Sandbox Code Playgroud)
这是否与两个单独的lazy vals 相同x,y或者我只获得一次开销,对于该对(x, y)?