typealias genericContext<T> = Demo<T>.() -> Unit
- псевдоним типа.Это просто дает новое имя типу на правой стороне.Это означает, что объявление doThis
в Demo
эквивалентно этому:
infix fun doThis(block: Demo<T>.() -> Unit) = block()
Теперь для типа Demo<T>.() -> Unit
: это тип функции.Функция этого типа принимает Demo
в качестве аргумента получателя и возвращает Unit
.Следовательно, это тип всех функций, определенных либо в классе Demo
, либо в качестве расширения класса Demo
.
Когда вы предоставляете лямбду этого типа (например, когда вы вызываете doThis
function), тогда this
будет указывать на Demo
-объект внутри лямбды.Например:
someDemo.doThis {
/* "this" is an object of type `Demo`.
* In this case it's actually "someDemo", because the implementation of "doThis"
* calls "block" on the implicit "this".
*/
this.say("Hey!")
}