EDIT: Um diese Frage neu geschrieben, basierend auf Original AntwortWarum ist Scala's unveränderliches Set in seinem Typ nicht kovariant?
Die scala.collection.immutable.Set
Klasse kovariant in seiner Art Parametern nicht. Warum ist das?
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
}
Es lohnt sich zu konstruieren, unter Hinweis darauf, dass 'foo (s.toSet [CharSequence])' kompiliert in Ordnung. Die 'toSet'-Methode ist O (1) - es wird nur' asInstanceOf' umbrochen. –
Beachten Sie auch, dass 'foo (Set (" Hello "," World "))' auch auf 2.10 kompiliert, da Scala in der Lage ist, den richtigen Typ von Set abzuleiten. Es funktioniert jedoch nicht mit impliziten Konvertierungen (http://stackoverflow.com/questions/23274033/implicit-definition-working-for-seq-but-not-for-set/). –