5

也许我(再次)在错误的树上吠叫,但是如果将属性类型为 a 是正常做法scala.collection.immutable.Set[A],那么在给定 a 的情况下,您将如何创建其中的一个scala.Iterable[A]?例如:

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

有人可以解释为什么有必要通过 a 创建不可变集Seq(或者如果不是,那么我该怎么做)?

4

2 回答 2

3

基本上是因为您通过“规范工厂方法”创建不可变 Set,应用在 Set 的伴随对象中,该对象采用序列或“可变参数”(如 Set(a,b,c))。看到这个:
http ://scala-tools.org/scaladocs/scala-library/2.7.1/scala/collection/immutable/Set$object.html

我认为标准库中没有其他方法可以做到这一点。

于 2009-03-24T16:13:56.577 回答
0

它将制作一个不可变的副本:

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()
于 2009-03-24T17:34:03.577 回答