Вот еще одна плохая идея:
object Lazy {
lazy val v = if (underlying ne null) underlying else ???
var underlying: String = null
}
Try(Lazy.v)
Lazy.underlying = "yes"
Try(Lazy.v)
Lazy.underlying = null
Try(Lazy.v)
Дело в том, что ленивый val получает более одного выстрела при инициализации, но успешно инициализируется только один раз, если вы этого хотите.
Обратите внимание, что синтаксис инициализатора по умолчанию находится на выходе. Они хотят, чтобы вы написали null
, если хотите null
.
Мой предпочтительный инициализатор по умолчанию:
var underlying: String = underlying
, просто чтобы сломать лед на званых обедах.