2009-03-24 6 views
5

Vielleicht bellt ich den falschen Baum (wieder) auf, aber wenn es eine normale Praxis ist, eine Eigenschaft als scala.collection.immutable.Set[A] eingegeben zu haben, wie würden Sie dann eine davon mit scala.Iterable[A] erstellen? Zum Beispiel:Scala muss ich beim Erstellen einer Sammlung aus einer iterablen in eine Seq konvertieren?

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 
    } 
} 

Kann jemand erklären, warum ist es notwendig, den unveränderlichen Satz über eine Seq zu erstellen (oder, wenn dies nicht der Fall, dann, wie ich es tun)?

Antwort

0

Es wird eine unveränderliche Kopie machen:

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

Es tut mir leid, ich verstehe nicht wirklich Ihren Punkt. Meine Frage war, warum es nicht einfacher war, von einer Iterable in eine unveränderbare Collection zu konvertieren (außer über eine Seq). Offensichtlich hast du mir eine schreibgeschützte Sammlung gegeben. nicht unveränderlich –

+0

Ja, es ist schreibgeschützt ... Ist es nicht ein Synonym für unveränderlich? Vielleicht nicht immer ... aber in diesem Fall? Kennen Sie eine Möglichkeit, diese Sammlung zu verändern? Dies ist die einzige Schnittstelle dazu und es ist nur lesbar. Es wird sich niemals ändern. –

Verwandte Themen