Une fonctionnalité pratique de Scala est lazy val
où l'évaluation d'un val
est retardée jusqu'à ce qu'elle soit nécessaire (au premier accès).
Bien sûr, un lazy val
doit avoir une certaine surcharge - Scala doit savoir si la valeur a déjà été évaluée et l'évaluation doit être synchronisée, car plusieurs threads pourraient essayer d'accéder à la valeur pour la première fois en même temps.
Quel est le coût exact d'un lazy val
- existe-t-il un drapeau booléen caché associé à une lazy val
pour savoir si elle a été évaluée ou non, ce qui est exactement synchronisé et s'il y a des coûts supplémentaires ?
En outre, supposons que je fasse ça :
class Something {
lazy val (x, y) = { ... }
}
Est-ce que c'est la même chose que d'avoir deux lazy val
s x
y y
ou est-ce que je reçois les frais généraux une seule fois, pour la paire (x, y)
?