type | layout | category | title | url |
---|---|---|---|---|
doc |
reference |
Syntax |
Ключевое слово this |
Чтобы сослаться на объект, с которым мы работаем, используется ключевое слово this:
- Внутри класса ключевое слово this ссылается на объект этого класса
- В функциях-расширениях или в литерале функции с принимающим объектом this обозначает принимающий объект, который передаётся слева от точки.
Если ключевое слово this не имеет определителей, то оно ссылается на область самого глубокого замыкания. Чтобы сослаться на this в одной из внешних областей, используются метки-определители:
Чтобы получить доступ к this из внешней области (класса, функции-расширения,
или именованных литералов функций с принимающим объектом) мы пишем this@label
, где @label
- это метка области, из которой нужно получить this:
class A { // неявная метка @A
inner class B { // неявная метка @B
fun Int.foo() { // неявная метка @foo
val a = this@A // this из A
val b = this@B // this из B
val c = this // принимающий объект функции foo(), типа Int
val c1 = this@foo // принимающий объект функции foo(), типа Int
val funLit = lambda@ fun String.() {
val d = this // принимающий объект литерала funLit
}
val funLit2 = { s: String ->
// принимающий объект функции foo(), т.к. замыкание лямбды не имеет принимающего объекта
val d1 = this
}
}
}
}