2009-03-24 17 views
5

Quizás estoy ladrando en el árbol equivocado (nuevamente) pero si es una práctica normal tener una propiedad escrita como scala.collection.immutable.Set[A], ¿cómo crearías una de estas dado un scala.Iterable[A]? Por ejemplo:Scala ¿Tengo que convertir a un Seq al crear una colección de un iterable?

class ScalaClass { 
    private var s: scala.collection.immutable.Set[String] 

    def init(): Unit = { 
     val i = new scala.collection.mutable.HashSet[String] 
     //ADD SOME STUFF TO i 

     s = scala.collection.immutable.Set(i) //DOESN'T WORK 

     s = scala.collection.immutable.Set(i toSeq : _ *) //THIS WORKS 
    } 
} 

Puede alguien explicar por qué es necesario para crear el conjunto inmutable a través de un Seq (o si no lo es, y luego hacer como lo hago)?

Respuesta

0

hará una copia inmutable:

scala> val mu = new scala.collection.mutable.HashSet[String] 
mu: scala.collection.mutable.HashSet[String] = Set() 

scala> val im = mu.clone.readOnly 
im: scala.collection.Set[String] = ro-Set() 
+0

Lo siento, yo realmente no entiendo su punto. Mi pregunta era por qué no era más fácil convertir de una Colección Iterable a una Inmutable (excepto a través de una Seq). Obviamente me has dado una colección de solo lectura; no es inmutable –

+0

Sí, es de solo lectura ... ¿No es un sinónimo de inmutable? Quizás no siempre ... ¿pero en este caso? ¿Conoces una forma de mutar esta colección? Esta es la única interfaz y solo de lectura. No hay forma de que alguna vez cambie. –

Cuestiones relacionadas