@cxm-2016
2017-01-28T14:53:13.000000Z
字数 761
阅读 2079
Kotlin
为了表示当前函数的 接收者(receiver), 我们使用 this{: .keyword } 表达式:
如果 this{: .keyword } 没有限定符, 那么它指向 包含当前代码的最内层范围. 如果想要指向其他范围内的 this{: .keyword }, 需要使用 标签限定符:
{:#qualified}
为了访问更外层范围(比如 类, 或 扩展函数,
或有标签的 带接受者的函数字面值)内的 this{: .keyword }, 我们使用 this@label, 其中的 @label 是一个 标签, 代表我们想要访问的 this{: .keyword } 所属的范围:
class A { // 隐含的标签 @Ainner class B { // 隐含的标签 @Bfun Int.foo() { // 隐含的标签 @fooval a = this@A // 指向 A 的 thisval b = this@B // 指向 B 的 thisval 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}}}}
