Funciones locales acceden a variables principales con el mismo nombre

esta es más una pregunta de curiosidad que surgió durante mi presentación en kotlin

Estoy usando una function local, y tiene el mismo nombre de parámetro que su padre.

Mira este ejemplo:

fun outerFunction(a: Int, b:Int) { fun localFunction(a: Int) { print(a) //local a print(b) //parent b print(???) //parent a? } } 

dentro de la function local, estoy imprimiendo el local a, el padre b, y ¿hay alguna forma de imprimir el padre?

Desde el punto de vista de un bytecode , esto sería posible, porque las variables de outerFunction son solo campos en la class interna de la function localFunction (en el bytecode), para que sean accesibles.

 // decompiled localFunction implements Function1<Integer, Unit> { final /* synthetic */ int $b; public final void invoke(int a) { System.out.print(a); int n = this.$b; System.out.print(n); } ... } 

Afortunadamente, kotlin no es compatible con esto, porque eso generará ambigüedad para el progtwigdor y es propenso a errores.

Así que evite usar el mismo nombre para las variables que ya se utilizan en algún lugar en un ámbito externo

  • Kotlin, estructura del proyecto
  • "Código en interfaces" Kotlin, ¿cómo evitan el "diamante mortal de la muerte"?
  • Kotlin no puede identificar los parameters a less que se haga reference explícita
  • El parámetro especificado como no nulo es nulo cuando se usa Mokito anyObject () en la function Kotlin
  • kotlin: algunos problemas con arreglos en annotations
  • ¿Falta la sala de cheques SQL en time de compilation?
  • ¿Por qué una reference no resuelta al intentar acceder a valores constantes?
  • Android Kotlin - Volley Código de respuesta inesperada 500
  • UnsupportedOperationException El command "android" ya no está incluido en el SDK
  • El service está creando una nueva instancia de mediaplayer
  • ¿Cómo administro los resources de testing de la unidad en Kotlin, como iniciar / detener una connection de database o un server de búsqueda elástica incorporado?