【发布时间】:2015-03-06 14:33:32
【问题描述】:
例如我有以下示例代码
fun f<T>( cb: (T, Int) -> Unit ): Unit {
println("f called with cb which accepts 2 arguments");
}
fun f<T>( cb: (T) -> Unit ): Unit {
println("f called with cb which accepts 1 argument");
f<T> {item, position -> cb(item) }
}
fun main(args : Array<String>) {
f { item -> }
f { item, position -> }
}
不知不觉我希望 f 函数选择正确的实现取决于我要传递给闭包的参数数量
目前 kompiller 给我错误:
(8, 7) : Overload resolution ambiguity:
internal fun <T> f(cb: (T, kotlin.Int) -> kotlin.Unit): kotlin.Unit defined in root package
internal fun <T> f(cb: (T) -> kotlin.Unit): kotlin.Unit defined in root package
在线沙盒代码:http://kotlin-demo.jetbrains.com/?publicLink=100745728838428857114-628607155
编译器版本:org.jetbrains.kotlin:kotlin-gradle-plugin:0.10.770
UPD:youtrack 上的相关问题:https://youtrack.jetbrains.com/issue/KT-6939
【问题讨论】:
-
看起来像一个错误。请向追踪者报告:youtrack.jetbrains.com/issues/KT#newissue
-
错误信息现在不同了(编译器版本 0.11.693):“类型推断失败:没有足够的信息来推断 fun
f(cb: (T) -> kotlin.单位):kotlin.Unit 请明确指定。”这对我来说很有意义:) -
@miensol 但它仍然无法按预期工作:/
-
@ruX 好吧,我是 Kotlin 的新手,所以这可能是一个愚蠢的问题,但是您希望
item的类型在 main 的第一行中的f { item -> /* here */ }内,当它执行时(假设它已编译)? -
@miensol 你是对的,谢谢你的正确问题!
标签: function generics overriding kotlin