Una caratteristica utile di Scala è lazy val
, in cui la valutazione di a val
è ritardata fino a quando non è necessaria (al primo accesso).
Naturalmente, è lazy val
necessario avere un certo sovraccarico: da qualche parte Scala deve tenere traccia del fatto che il valore sia già stato valutato e la valutazione debba essere sincronizzata, poiché più thread potrebbero tentare di accedere al valore per la prima volta contemporaneamente.
Qual è esattamente il costo di a lazy val
- c'è un flag booleano nascosto associato a a lazy val
per tenere traccia se è stato valutato o no, che cosa è esattamente sincronizzato e ci sono altri costi?
Inoltre, supponiamo che io faccia questo:
class Something {
lazy val (x, y) = { ... }
}
È questo lo stesso che avere due distinti lazy val
s x
e y
o faccio ad avere il sovraccarico solo una volta, per la coppia (x, y)
?
bitmap$0
campo è volatile nell'attuale implementazione (2.8).