Scala: o código pai do valor substituído é executado, mas o valor não é atribuído no pai
Executando o código abaixo:
class Parent {
val value = {
println("Setting value in parent")
"ParentVal"
}
println(s"Parent value is ${value}")
}
class Child extends Parent {
override val value = {
println("Setting value in child")
"ChildVal"
}
println(s"Child value is ${value}")
}
new Child
Produz esta saída:
Setting value in parent
Parent value is null
Setting value in child
Child value is ChildVal
Portanto, o código associado à atribuição de valor pai é executado, no entanto, o valor não é realmente atribuído ao pai. Posteriormente, o código filho é executado e atribui o valor conforme o esperado.
Alguém poderia explicar a cadeia de eventos aqui em um nível inferior?