a{
val example:Example = this@a
}
}
class Example
'this' is not defined in this context
Как можно внутри лямбды достучаться до контекста?
(1.6.20)
если не принципиально через контекст ресиверы то можно просто Example.() -> Unit и как раз this и будет контекстом внутри
ресиверы приниципиальны
попробуй this@Example
Unresolved reference: @Example
Это косяк текущей реализации. Там должен работать резолв по типу, но не работает. Можно заменить лямбду на fun interface, там все работает.
О, попробую с fun interface
Там с лямбдами вообще куча косяков
FYI fun interface Block { context(Example) fun run() } fun a(block: Block) { } fun x() { a { val example: Example = this@Example //this@a; this@block; this@Block } } class Example не работает. Похоже пока поживу с костылем context(T)
Я посмотрел свой код, я там наследую класс для того, чтобы видет все ресиверы https://github.com/mipt-npm/spc-site/blob/4024eed50ffe8bd8e370c55bcf6aaaba45a9fd2d/src/main/kotlin/space/kscience/snark/TextTransformation.kt#L16 Вариант, который я предлагал в кипе для эмуляции имен без добавления в язык такой: val MyContext.myContext = this Таким просты экстеншеном из любого контекста можно вытащить тип
Обсуждают сегодня