我有一个简单的工厂模式,其中的实现是通过重载决议确定的。问题在于Kotlin编译器对内联lambda表达式的“Overload resolution ambiguity ..”抱怨。Kotlin:内联lambda和重载分辨率模糊
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编译器如何解决重载解析以及为什么内联lambda被认为是模糊的?
这似乎是一个错误,因为如果我投像'拉姆达{我:诠释 - > 1.0}为(INT) - > Double'没有歧义,但它说,不需要转换。另外,如果我将lambda提取到'val l = {i:Int - > 1.0}'并使用它,再次没有歧义。请在错误跟踪器中搜索此问题,如果它不存在,请提交一个新文件:https://youtrack.jetbrains.com/issues/KT – hotkey
另一个有趣的事情是,如果您将@ lambkey作为@hotkey执行,IDE会告诉你没有必要。但是,当你删除它时,它会抱怨含糊不清。 –
感谢您的输入!认为这可能是一个错误。在https://youtrack.jetbrains.com/issue/KT-11265 –