Unter der Annahme, dass ich eine Funktion, die implizite TypeTag definiert nimmt: esWie macht man die Inferenz von Scala, die stark genug ist, um generische Typparameter zu entdecken?
def andOptionFn[A: TypeTag](g: Int => Option[A]) = {
val ttg = ScalaReflection.universe.typeTag[A]
println(ttg)
...
}
Und rufen:
andOptionFn{
v =>
Some(v)
}
Ich würde erwarten, scala Typinferenz bekommen den richtigen Typ TypeTag (Option (Int)), aber stattdessen bekam ich:
TypeTag(Option(Any)) (not even a higher kind)
Warum Scala ist nicht in der Lage, automatisch in Kompilierungszeit abzuleiten? Und was muss getan werden, um es zu verbessern?
Sorry, in der Tat wurde das Problem, auf das ich stieß, von etwas anderem verursacht: Es ist ein Fehler im Compiler-Typ Inferenz, die immer noch nicht wurde gelöst: siehe das Ergebnis in http://scastie.org/20293 für einen kurzen Blick – tribbloid
Zum Vergleich, siehe 2 etwas andere Fälle: http://scastie.org/20294 und http://scastie.org/20295 – tribbloid
die Das Problem wird dadurch verursacht, dass andOptionFn in eine andere Funktion eingebunden wird, die den generischen Typparameter akzeptiert. Sehr komplizierter Bug oder? – tribbloid