Одна удобная функция Scala - lazy val
, где оценка a val
задерживается до тех пор, пока она не понадобится (при первом доступе).
Конечно, a lazy val
должен иметь некоторые накладные расходы - где-то Scala должен отслеживать, было ли значение уже оценено, и оценка должна быть синхронизирована, поскольку несколько потоков могут попытаться получить доступ к значению в первый раз в то же время.
В чем именно заключается стоимость lazy val
- существует ли скрытый логический флаг, связанный с lazy val
, чтобы отслеживать, если он был оценен или нет, что именно синхронизировано и есть ли какие-либо затраты?
Кроме того, предположим, что я делаю это:
class Something {
lazy val (x, y) = { ... }
}
Это то же самое, что два отдельных lazy val
x
и y
, или я получаю служебные данные только один раз, для пары (x, y)
?