Я создаю этот объект в REPL. И затем проверили его последовательность настройки на прилагаемом изображении ниже. Результаты сбивают с толку.Порядок построения вложенных объектов и переменных-членов
object T {
val default = A
var options = List[P]()
println(options)
sealed trait P
object A extends P {
override def toString = "A"
println(T.options)
println("A")
}
object B extends P {
override def toString = "B"
println(T.options)
println("A")
}
object C extends P {
override def toString = "C"
println(T.options)
println("A")
}
}
В первом запуске, Т, только внутренний объект А, кажется, будет построен. Почему объект B и объект C ничего не печатают?
Также обратите внимание, что println (T.options) в первом запуске возвращает «null». Это потому, что устанавливаются первые внутренние объекты, а затем устанавливаются внешние объекты других членов?
При вводе T.A ничего не печатается, потому что объект уже настроен.
При вводе T.B он устанавливает объект B и правильно печатает T.options i.e List() вместо null.
Спасибо за подробное объяснение. «Val default = A» был дьяволом здесь. :( – Samar
@Samar Приветствую вас. Да, вот что вызвало каскад призывов. –