У меня есть простой фабричный шаблон, где реализация определяется разрешением перегрузки. Проблема в том, что компилятор Kotlin жалуется на «Неоднозначность разрешения перегрузки..» для встроенной лямбды.
class Foo(){
companion object Factory {
fun create(x: Int, f: (Int) -> Double) = 2.0
fun create(x: Int, f: (Int) -> Int) = 1
}
}
fun main(args:Array<String>){
val a = Foo.create(1,::fromDouble) //OK
val b = Foo.create(1,::fromInt) //OK
val ambiguous = Foo.create(1){i -> 1.0} //Overload resolution ambiguity?
}
fun fromDouble(int:Int) = 1.0
fun fromInt(int:Int) = 1
Как компилятор Kotlin разрешает разрешение перегрузки и почему встроенная лямбда считается неоднозначной?
{ i: Int -> 1.0 } as (Int) -> Double
, двусмысленности не будет, но он говорит, что приведение не требуется. Кроме того, если я извлеку лямбду вval l = { i: Int -> 1.0 }
и использую ее, опять же, двусмысленности не будет. Пожалуйста, найдите эту проблему в системе отслеживания ошибок и, если ее нет, отправьте новую: youtrack.jetbrains.com/ выпусков/КТ - person hotkey   schedule 01.03.2016