kotlin如何在多层应用函数中引用outer-scope这个

例如:

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

我的问题是如何参考“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 also一个新的增加。 如果您使用的是旧版本,则可能无法看到它。 要么将kotlin更新到1.1,要么将这段代码添加到模块中的任何位置:

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