Size: a a a

2020 June 21

IO

Iaroslav Orlov in Kotlin JVM
у меня CommandContext - это вообще структура для парсинга
источник

ПФ

Паша Финкельштейн... in Kotlin JVM
Iaroslav Orlov
вообще не понимаю, о чем вы
ну тип там в разных блоках разный this
источник

IO

Iaroslav Orlov in Kotlin JVM
а, да
источник

AN

Alexander Nozik in Kotlin JVM
Долго объяснять. Суть в том, что есть некоторый кусок кода с ресивером. Мы его компилим. А потом динамически подменяем ресивер и реинтепретируем код, что-то такое
источник

AN

Alexander Nozik in Kotlin JVM
Паша Финкельштейн
ну тип там в разных блоках разный this
это фиг с ним.
источник

ПФ

Паша Финкельштейн... in Kotlin JVM
Alexander Nozik
Долго объяснять. Суть в том, что есть некоторый кусок кода с ресивером. Мы его компилим. А потом динамически подменяем ресивер и реинтепретируем код, что-то такое
ты хочешь сказать мы так можем?
источник

AN

Alexander Nozik in Kotlin JVM
Паша Финкельштейн
ты хочешь сказать мы так можем?
Почти.
источник

ПФ

Паша Финкельштейн... in Kotlin JVM
но как?
источник

AN

Alexander Nozik in Kotlin JVM
В jupyter это уже можно, там просто ресивер подменяется при выполнении ячейки. В Kmath это делается на этапе типов. Сейчас найду пример
источник

IO

Iaroslav Orlov in Kotlin JVM
Iaroslav Orlov
я вот что-то такое делаю
в общем, я тут жестко жертвую типобезопасностью в пользу выразительности. т.е. мне нужна лямбда, которая принимает вообще что угодно. а что она применяет - определяется аннотацией, которая передает классы, которые генерируют объекты, которая эта лямбда принимает, из строчки.
источник

IO

Iaroslav Orlov in Kotlin JVM
Iaroslav Orlov
в общем, я тут жестко жертвую типобезопасностью в пользу выразительности. т.е. мне нужна лямбда, которая принимает вообще что угодно. а что она применяет - определяется аннотацией, которая передает классы, которые генерируют объекты, которая эта лямбда принимает, из строчки.
если бы можно было вешать аннотации на параметр лямбды, то было бы вообще хорошо
источник

IO

Iaroslav Orlov in Kotlin JVM
Iaroslav Orlov
в общем, я тут жестко жертвую типобезопасностью в пользу выразительности. т.е. мне нужна лямбда, которая принимает вообще что угодно. а что она применяет - определяется аннотацией, которая передает классы, которые генерируют объекты, которая эта лямбда принимает, из строчки.
по сути, если бы я писал подобное апи на джаве, то у меня был бы класс, в котором есть метод, принимающий произвольные параметры, на который навешана аннотация.
источник

AN

Alexander Nozik in Kotlin JVM
Вот тут: https://github.com/mipt-npm/kmath/blob/24828e7a267c279d19e3e06912d7ad1bb0f8fa2e/kmath-core/src/commonTest/kotlin/scientifik/kmath/expressions/ExpressionFieldTest.kt#L45-L51. Там получается немного громоздко, но контекст задается после самого выражения
источник

AN

Alexander Nozik in Kotlin JVM
Iaroslav Orlov
в общем, я тут жестко жертвую типобезопасностью в пользу выразительности. т.е. мне нужна лямбда, которая принимает вообще что угодно. а что она применяет - определяется аннотацией, которая передает классы, которые генерируют объекты, которая эта лямбда принимает, из строчки.
Вопрос в том, насколько арность известна заранее
источник

AN

Alexander Nozik in Kotlin JVM
Iaroslav Orlov
если бы можно было вешать аннотации на параметр лямбды, то было бы вообще хорошо
А разве нельзя?
источник

IO

Iaroslav Orlov in Kotlin JVM
Alexander Nozik
А разве нельзя?
Retention=RUNTIME нельзя сделать
источник

IO

Iaroslav Orlov in Kotlin JVM
а если вешать на лямбду, то оно вешается на импл invoke
источник

AN

Alexander Nozik in Kotlin JVM
А почему не сделать типо-параметром,
источник

AN

Alexander Nozik in Kotlin JVM
Alexander Nozik
А почему не сделать типо-параметром,
Как это сделано в размерах матриц
источник

IO

Iaroslav Orlov in Kotlin JVM
Alexander Nozik
Вопрос в том, насколько арность известна заранее
по логике действительно можно сгенерировать 23 метода, в которых напрямую сводить это в FunctionN
источник