kotlin cómo referir el scope externo esto en funciones de aplicación multicapa

por ejemplo:

v1?.apply { v2?.apply { call(this, target, outerThis); } } 

mi pregunta es cómo hacer reference a "outerThis"? Gracias por cualquier ayuda.

Puedes usar una label y luego calificar this expresión:

 v1?.apply outer@ { v2?.apply { call(this, target, this@outer) } } 

En general, no se recomienda utilizar llamadas de apply anidadas, que es para evitar su situación. Por supuesto, puede usar tags como solución, pero también puede usarla como alternativa:

 v1?.also { outer -> v2?.apply { call(this, target, outer) } } 

Esto evita el uso de una label, que a menudo es desaprobada. Sin embargo, no hay nada de malo en las tags.

Nota: also es una nueva adición a stdlib en kotlin 1.1. Si está utilizando una versión anterior, es posible que no pueda verla. Actualice kotlin a 1.1 o agregue este fragment de código en cualquier parte de su module:

 inline fun <T> T.also(block: (T) -> Unit) { block(this) } 
  • java.lang.NoClassDefFoundError $$ inlined $ forEach $ lambda $ 1 en Kotlin
  • ¿Pasar lambdas a Observable.subscribe en kotlin dará como resultado pérdidas de memory?
  • Pasando lambda en lugar de interfaz
  • Kotlin: lambdas seguros (sin pérdida de memory)?
  • ¿Por qué no puedo usar lambda para la interfaz en kotlin?
  • Kotlin: ¿usar una lambda en lugar de una interfaz funcional?
  • Kotlin - Lista dentro de un filter de list
  • Java Lambda para Kotlin
  • Kotin Cómo especificar la label de devolución cuando se incluye en Lambda
  • ¿Cómo escribir lambdas con generics en kotlin?
  • ¿Cómo convierto una matriz de cadenas a una matriz de Int en Kotlin?