Это действительно метка, и она особенно полезна в этом примере, поскольку она маркирует анонимную функцию. Вы используете ярлык для уточняющих ссылок (например, this
).
В следующем примере лямбда-код определяет внутренний метод 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