Par exemple, j'ai exemple de codefonction Redéfinition avec les génériques dans Kotlin
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 -> }
}
Inconsciemment Je veux fonction f
choisir la mise en œuvre droite dépend de la quantité d'arguments que je vais passer à la fermeture
Actuellement k ompiller me donne l'erreur:
(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
code en bac à sable en ligne: http://kotlin-demo.jetbrains.com/?publicLink=100745728838428857114-628607155
Version compiller: org.jetbrains.kotlin: Kotlin-gradle-plugin: 0.10.770
UPD: le problème lié YouTrack: https://youtrack.jetbrains.com/issue/KT-6939
On dirait un bug. S'il vous plaît signaler au tracker: https://youtrack.jetbrains.com/issues/KT#newissue –
Le message d'erreur est différent maintenant (compilateur version 0.11.693): "L'inférence de type a échoué: pas assez d'informations pour inférer le paramètre T dans le fun f (cb: (T) -> kotlin.Unit): kotlin.Unit Veuillez le spécifier explicitement. " Ce qui a du sens pour moi :) –
miensol
@miensol mais ça ne fonctionne toujours pas comme prévu:/ – ruX