从那里:https://kotlinlang.org/docs/reference/this-expressions.html#qualified
我们有这样的代码:
-XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly
在https://pl.kotl.in/Syah1jaIN处运行,它将编译并被正确调用
我认为“ lambda @”是一个注释,但此处的文档: https://kotlinlang.org/docs/reference/annotations.html 指的是语法排序,例如“ @word”,而不是“ word @”。
答案 0 :(得分:3)
它确实是一个标签,并且在该示例中特别有用,因为它为匿名函数添加了标签。您可以使用标签作为合格的引用(例如this
)。
在下面的示例中,lambda定义了内部方法nested
,该方法可能要从this
访问funLit
。由于它是匿名的,因此我们需要对其进行标记,lambda
是一个任意标识符。
fun main() {
val funLit = lambda@ fun String.() {
println("this: " + this)
println("this@lambda: " + this@lambda)
fun String.nested() {
println("this in String.nested(): " + this)
println("this@nested in String.nested(): " + this@nested)
println("this@lambda in String.nested(): " + this@lambda)
}
"nested".nested()
}
"funLit".funLit()
}
运行它可以非常清楚地显示限定词所指的this
。
this: funLit
this@lambda: funLit
this in String.nested(): nested
this@nested in String.nested(): nested
this@lambda in String.nested(): funLit
这是一个游乐场链接:https://pl.kotl.in/SJrlUs6LE
答案 1 :(得分:2)
这些称为标签。考虑这个例子。 with
接受一个接收者(此处为StringBuilder
)和一个带有接收者的lambda(解释为here)。在第二个参数中,lambda表达式this
引用了StringBuilder
。因此,如果您print(this)
与合格的print(this@with)
相同。当您要访问外部this
引用(例如来自this
的封闭实例)时,限定的Outer
很有意义:
class Outer{
fun someFunction() = with(StringBuilder()){
println(this)
println(this@with) //same as this
println(this@Outer)
}
}
还可以设置自定义标签:
fun someFunction() = with(StringBuilder()) customLabel@{
println(this@customLabel) //same as this
}
答案 2 :(得分:1)
它不是注释,而是标签:https://kotlinlang.org/docs/reference/returns.html#break-and-continue-labels
通常在lambda和循环中使用,例如跳出嵌套循环。