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) } 
  • ¿Es posible ocultar variables del cierre de lambda?
  • Funciones de mayor order de Kotlin en el proyecto de Java
  • Cuando los parameters lambda deben ser noinline en Kotlin?
  • La function de extensión de kotlin no entiende cómo funciona esto
  • Kotlin y Jack no son compatibles (Android Studio 2.3.2)
  • ¿Cómo convierto una matriz de cadenas a una matriz de Int en Kotlin?
  • Tipo Lambda con número variable de args en Kotlin?
  • Kotlin: ambigüedad de resolución de sobrecarga lambda y sobrecarga
  • Kotlin nombró la syntax del parámetro para el cierre / lambda
  • ¿Cómo mejorar la syntax de kotlin lambda?
  • Kotlin: lambdas seguros (sin pérdida de memory)?