баг есть, где не работает с простой лямбдой, но работает с переменной (иссью, что @Jellymath выше кидал)
Ну идейно звучит, что компилятору не должно быть проблемой отличить строку от числа в лямбде: class Foo { fun bar(stringMaker: () -> String) { println("Our maker created ${stringMaker()}") } } fun Foo.bar(intMaker: () -> Int) = bar { "Int: ${intMaker()}" } fun main() { val foo = Foo() val parameter = { 2 } foo.bar(parameter) //foo.bar { 2 } //doesn't work foo.bar { "abc" } }
А, ну это вы про возвращаемый тип функции
такое можно заставить работать с аннотацией(точное её название не помню), потому что здесь хотя бы понятно как определять, какую из ф-ий брать а с ресивером это наверно в общем нереально
Компилятор отлично с этим справляется, просто не в случае когда я передаю напрямую лямбду в функцию
так я именно про лямбду и говорю, а не когда уже созданную просто как параметр передают если отличается ресивер - то его же никак не определить кроме как указав его через fun T.() {}
так я делаю as T.()->Unit и это не помогает
Сомневаюсь, что кастовать один функциональный тип к другому - это хорошая затея. Но странно, что это не помогает.
так а какой синтаксис, чтобы указать, какого типа функциональный тип?
У лямбды тип не указать, остаются только анонимные функции 🤷♂️
Обсуждают сегодня