@cxm-2016
2017-01-28T22:53:13.000000Z
字数 761
阅读 1695
Kotlin
为了表示当前函数的 接收者(receiver), 我们使用 this{: .keyword } 表达式:
如果 this{: .keyword } 没有限定符, 那么它指向 包含当前代码的最内层范围. 如果想要指向其他范围内的 this{: .keyword }, 需要使用 标签限定符:
{:#qualified}
为了访问更外层范围(比如 类, 或 扩展函数,
或有标签的 带接受者的函数字面值)内的 this{: .keyword }, 我们使用 this@label
, 其中的 @label
是一个 标签, 代表我们想要访问的 this{: .keyword } 所属的范围:
class A { // 隐含的标签 @A
inner class B { // 隐含的标签 @B
fun Int.foo() { // 隐含的标签 @foo
val a = this@A // 指向 A 的 this
val b = this@B // 指向 B 的 this
val c = this // 指向 foo() 函数的接受者, 一个 Int 值
val c1 = this@foo // 指向 foo() 函数的接受者, 一个 Int 值
val funLit = lambda@ fun String.() {
val d = this // 指向 funLit 的接受者
}
val funLit2 = { s: String ->
// 指向 foo() 函数的接受者, 因为包含当前代码的 Lambda 表达式没有接受者
val d1 = this
}
}
}
}