Eine praktische Funktion von Scala ist lazy val
, dass die Auswertung von a val
verzögert wird, bis es notwendig ist (beim ersten Zugriff).
Natürlich lazy val
muss ein gewisser Overhead auftreten - irgendwo muss Scala nachverfolgen, ob der Wert bereits ausgewertet wurde, und die Auswertung muss synchronisiert werden, da möglicherweise mehrere Threads gleichzeitig versuchen, zum ersten Mal auf den Wert zuzugreifen.
Was genau kostet a lazy val
- gibt es ein verstecktes boolesches Flag, das mit a verknüpft ist lazy val
, um den Überblick zu behalten, ob es ausgewertet wurde oder nicht, was genau synchronisiert ist und ob weitere Kosten anfallen?
Angenommen, ich mache Folgendes:
class Something {
lazy val (x, y) = { ... }
}
Ist dies dasselbe wie zwei separate lazy val
s x
und y
oder bekomme ich den Overhead nur einmal für das Paar (x, y)
?
bitmap$0
Feld ist in der aktuellen Implementierung volatil (2.8).