EDIT: Réécrit cette question sur la base réponse originalePourquoi l'ensemble immuable de Scala n'est-il pas covariant dans son type?
La classe scala.collection.immutable.Set
est covariante pas dans son paramètre de type. Pourquoi est-ce?
import scala.collection.immutable._
def foo(s: Set[CharSequence]): Unit = {
println(s)
}
def bar(): Unit = {
val s: Set[String] = Set("Hello", "World");
foo(s); //DOES NOT COMPILE, regardless of whether type is declared
//explicitly in the val s declaration
}
Il convient de noter que 'foo (s.toSet [CharSequence])' compile bien. La méthode 'toSet' est O (1) - elle ne fait qu'intégrer' asInstanceOf'. –
Notez également que 'foo (Set (" Hello "," World "))' se compile aussi sur 2.10, puisque Scala semble être en mesure d'inférer le bon type de Set. Il ne fonctionne pas avec les conversions implicites (http://stackoverflow.com/questions/23274033/implicit-definition-working-for-seq-but-not-for-set/). –