Kotlin:内在范围 – 这

我只是使用Kotlins自动重构,它基本上离开了我:

coverView.viewTreeObserver.addOnPreDrawListener { coverView.viewTreeObserver.removeOnPreDrawListener(this) true } 

哪个不行 IntelliJ显示我this是指外部类而不是OnPreDrawListener。 这是为什么? kotlin文档说这总是指最内在的范围。

要修复你的代码,你可以在这里使用object expression而不是lambda

 coverView.viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener { override fun onPreDraw(): Boolean { coverView.viewTreeObserver.removeOnPreDrawListener(this) return true } }) 

函数表达式中的this表达式(以及传递给addOnPreDrawListener方法的lambda 函数表达式)允许您访问lambda的闭包,即在其最外层范围中声明的变量,而不是lambda本身。