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.

  • MyBatis con classs de datos inmutables en Kotlin
  • NullPointerException en Android Studio 3 Beta 1
  • ¿Las corutinas son solo azúcar sintáctico para los manipuladores de finalización?
  • Kotlin: lanzar ArrayList <String!> Para Array <String>
  • ¿Cómo diseñar una class compleja que incluya algunas classs para hacer una expansión fácil en el futuro en Kotlin?
  • la demostración del reino de Kotlin no se puede ejecutar
  • Kotlin invoke getter / setter reflexivamente
  • kotlin check tipo types incompatibles
  • Configuración regional del cambio de idioma en la progtwigción "Kotlin" Como la configuration regional funciona en Java Fine, pero en el idioma Kotlin no funciona
  • Mocking methods de Kotlin con Java + Mockito
  • Nuevo fragment de Kotlin de Recyclerview