当用“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@
}
}
我是 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@
}
}