Lambda kotlin如何在多层应用函数中引用此外部范围

Lambda kotlin如何在多层应用函数中引用此外部范围,lambda,kotlin,apply,Lambda,Kotlin,Apply,例如: v1?.apply { v2?.apply { call(this, target, outerThis); } } 我的问题是如何称呼“外衣”? 谢谢您的帮助。您可以先使用,然后使用表达式: v1?.apply outer@ { v2?.apply { call(this, target, this@outer) } } 通常不建议使用嵌套的apply调用,这是为了避免出现这种情况。当然,您

例如:

 v1?.apply {
       v2?.apply {
           call(this, target, outerThis);
       }
    }
我的问题是如何称呼“外衣”? 谢谢您的帮助。

您可以先使用,然后使用表达式:

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

通常不建议使用嵌套的
apply
调用,这是为了避免出现这种情况。当然,您可以使用标签作为解决方法,但也可以使用
作为替代方法:

v1?.also { outer ->
    v2?.apply { 
        call(this, target, outer)
    }
}
这就防止了标签的使用,这通常是不受欢迎的。不过,标签并没有什么问题

注:
也是对kotlin 1.1中stdlib的新添加。如果您使用的是旧版本,您可能无法看到它。将kotlin更新为1.1或在模块中的任意位置添加此代码:

inline fun <T> T.also(block: (T) -> Unit) { block(this) }
inline fun T.allow(block:(T)->Unit){block(this)}

这是否也适用于扩展功能?在我的例子中,我在
java.util.Date
类上扩展了一个函数。在我的函数中,我想调用
Calendar.getInstance().apply{
,但我不知道如何获取日期对象的引用。