EDITAR: Re-escrito esta pregunta basada en respuesta original¿Por qué el conjunto inmóvil de Scala no es covariante en su tipo?
La clase scala.collection.immutable.Set
no es covariante en su parámetro de tipo. ¿Por qué es esto?
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
}
Vale la pena señalar que 'foo (s.toSet [CharSequence]) 'compila bien. El método 'toSet' es O (1) - simplemente envuelve' asInstanceOf'. –
Tenga en cuenta también que 'foo (Set (" Hello "," World "))' se compila también en 2.10, ya que Scala parece ser capaz de inferir el tipo correcto de conjunto. Sin embargo, no funciona con conversiones implícitas (http://stackoverflow.com/questions/23274033/implicit-definition-working-for-seq-but-not-for-set/). –