Une fonctionnalité pratique de Scala est lazy val
que l'évaluation d'un val
est retardée jusqu'à ce qu'elle soit nécessaire (au premier accès).
Bien sûr, cela lazy val
doit avoir une surcharge - quelque part, Scala doit savoir si la valeur a déjà été évaluée et l'évaluation doit être synchronisée, car plusieurs threads peuvent essayer d'accéder à la valeur pour la première fois en même temps.
Quel est exactement le coût d'un lazy val
- y a-t-il un indicateur booléen caché associé à a lazy val
pour suivre s'il a été évalué ou non, qu'est-ce qui est exactement synchronisé et y a-t-il d'autres coûts?
De plus, supposons que je fasse ceci:
class Something {
lazy val (x, y) = { ... }
}
Est-ce la même chose que d'avoir deux lazy val
s séparés x
et y
ou est-ce que je reçois la surcharge une seule fois, pour la paire (x, y)
?
bitmap$0
champ est volatile dans l'implémentation actuelle (2.8).