kotlin - 当用 `@` 表示接收者时, `this` 标签在 Kotlin 中的位置

标签 kotlin this grammar

我是 Kotlin 的新手。我很好奇 Kotlin 中带有前缀 @ 或后缀 @ 的标记 this 的区别。

我刚刚看到了一个编写SignInActivity@this的代码,它的工作方式似乎与this@SignInActivity完全相同。

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

我试图对 *@this 表单进行一些研究,但找不到任何引用。我只能找到 this official doc它演示了 this@*。如果有人能与我分享我应该去的正确引用,那就太好了。

最佳答案

SignInActivity@this 只是 this 的另一个表达式,具有定义一个名为 SignInActivity 的不必要标签的功能(与this.

根据Kotlin grammar documentation :

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

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

@hello 是标记循环或 block 的引用。

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

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

关于kotlin - 当用 `@` 表示接收者时, `this` 标签在 Kotlin 中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47626592/

相关文章:

javascript - 类中的jquery函数混淆了this关键字

inheritance - perl6 语法 Action 类方法似乎没有继承,命名捕获似乎没有制作

Android 架构导航 - onSupportNavigateUp()

java - Java调用方法时可以省略 'this'吗?

具有多个 "parameter"的 Kotlin 枚举

java - 什么时候需要强制转换 'this'?

grammar - 不明白为什么 Bison 扔 "Rules useless in parser due to conflicts"

visual-studio-code - 如何向 VSCode 添加基本语法?

sorting - 如何使用自定义顺序对 kotlin 中的对象数组进行排序?

android - 使用 Kotlin 在 Android 中的测试中声明 @BeforeClass 的正确方法是什么