当用“this”表示接收者时,“@”标签在 Kotlin 中的位置

Position of `@` label in Kotlin when denoting receiver with `this`

我是 Kotlin 的新手。我很好奇 Kotlin 中带有前缀 @ 或后缀 @.

的标签 this 的区别

我刚刚看到一个代码写着SignInActivity@this,它看起来和this@SignInActivity完全一样。

这两个是一回事吗?如果不是,两者有什么区别?

我试图对 *@this 表单进行一些研究,但找不到任何参考资料。我所能找到的只是 this official doc,它证明了 this@*。如果有人能与我分享我应该去的正确参考,那就太好了。

SignInActivity@这意味着 SignInActivity.this (Java) this@SignInActivity 意味着 - 使用 SignInActivity 上下文而不是本地上下文(通常在闭包中)。

SignInActivity@ this 只是 this 的另一个表达式,其功能是定义一个不必要的标签 SignInActivity(与实际的 class 名称无关) this.

根据Kotlin grammar documentation

labelReference (used by atomicExpression, jump)
   : "@" ++ LabelName
   ;
labelDefinition (used by prefixUnaryOperation, annotatedLambda)
  : LabelName ++ "@"
  ;

hello@ 只是一个名称为 "hello" 的标签(对于 Returns and Jumps),

@hello 是标记循环或块的参考。

这些表达式可以组合使用如下:

loop@ for (i in 1..100) {
    for (j in 1..100) {
        if (...) break@loop //jump to loop@
   }
}