Jedną z przydatnych funkcji Scali jest to lazy val
, że ocena a val
jest opóźniona do momentu, gdy będzie to konieczne (przy pierwszym dostępie).
Oczywiście lazy val
musi mieć pewien narzut - gdzieś Scala musi śledzić, czy wartość została już oszacowana, a ocena musi zostać zsynchronizowana, ponieważ wiele wątków może próbować uzyskać dostęp do wartości po raz pierwszy w tym samym czasie.
Jaki dokładnie jest koszt lazy val
- czy istnieje ukryta flaga logiczna związana z a, lazy val
aby śledzić, czy została oszacowana, czy nie, co dokładnie jest zsynchronizowane i czy są jakieś dodatkowe koszty?
Ponadto załóżmy, że zrobię to:
class Something {
lazy val (x, y) = { ... }
}
Czy to to samo, co posiadanie dwóch oddzielnych lazy val
siatek x
i y
czy otrzymuję narzut tylko raz, dla pary (x, y)
?
bitmap$0
pole jest niestabilne w obecnej implementacji (2.8).