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