Pourquoi l'appel à fn (Iterator ("foo") compile, mais l'appel à fn (fooIterator) échoue avec une erreur "incompatibilité de type; found: Iterator [java.lang.String] requis: scala.Iterator [ com.banshee.Qx.HasLength] "Quelle est la différence entre ces deux appels à une fonction prenant une collection de types structurels?
object Qx {
type HasLength = {def length: Int}
def fn(xs: Iterator[HasLength]) = 3
var tn = fn(Iterator("foo"))
var fooIterator = Iterator("foo")
var tnFails = fn(fooIterator) //doesn't compile
}
sont-ils pas la même chose
Pouvez-vous poster des singnatures de type des itérateurs? Peut-il y avoir des annotations ou des implicits de variance? – Dario
Ceci est juste la bibliothèque standard, aucun code supplémentaire nécessaire. scala> iterator ("foo") res0: iterator [java.lang.String] = non vide iterator –