Por que o código a seguir imprime 0
?
class X {
fun f() {
val x = 0
val a = object {
val x = 1
fun g() {
println(x)
}
}
a.g()
}
}
fun main() {
val x = X()
x.f()
}
Por que a declaração de propriedade interna não sombreia a externa?
Para um nome não qualificado, local callable (ou seja, declarações em um escopo de declaração ) são sempre priorizadas sobre as não locais. A regra "coisas em escopos internos escondem coisas em escopos externos" vem depois disso.
Na seção de resolução de sobrecarga da especificação,
A etapa 1 considera todos os callables locais e somente depois disso tentamos os callables com um receptor na segunda etapa.
Aplicando isso ao seu código,
Se os moradores locais não forem priorizados dessa forma, você não terá como se referir a eles
x
quando estiver emg
.