Kotlin: Alcance interno: este

Acabo de utilizar el auto refactor de Kotlins y básicamente me dejó con esto:

coverView.viewTreeObserver.addOnPreDrawListener { coverView.viewTreeObserver.removeOnPreDrawListener(this) true } 

Lo cual no funciona. IntelliJ me muestra que this refiere a la class externa pero no a OnPreDrawListener. ¿Porqué es eso? Los documentos de Kotlin dicen que esto siempre se refiere al scope más interno.

Para corregir su código, puede usar la object expression lugar de lambda aquí:

 coverView.viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener { override fun onPreDraw(): Boolean { coverView.viewTreeObserver.removeOnPreDrawListener(this) return true } }) 

this expresión en expresión de function (y la lambda que pasa al método addOnPreDrawListener es expresión de function) le permite acceder al cierre de lambda, es decir, las variables declaradas en su ámbito más externo, no la lambda misma.

  • ¿Cómo creo una variable de function con una cantidad variable de arguments?
  • Implementando la list enlazada en Kotlin
  • Referencia no resuelta para Holdr en Kotlin
  • Acceso directo para "Convertir código Java (no file) a kotline"
  • ¿Cómo get opciones personalizadas en el plugin de protocolos para Java?
  • SupportfragmentManager se convierte en null android kotlin
  • ¿Cuál es la diferencia entre properties y parameters en Kotlin?
  • Cómo escribir la testing adecuada para el repository de interfaz reactiva que devuelve Observable solo cuando hay algún evento, cómo simular el desencadenamiento de ese evento
  • El complemento IdeaVim de IntelliJ inhabilita la conversión de Java a Kotlin
  • Kotlin coroutines usa produce y mockito para burlarse del trabajo de producción
  • Kotlin + Intelij + HtmlUnit: no se puede invocar ninguna de las siguientes funciones con los arguments suministrados