2009-03-24 1 views
5

Возможно, я лаю по неправильному дереву (снова), но если это обычная практика иметь свойство, набранное как scala.collection.immutable.Set[A], то как бы вы создали один из них с учетом scala.Iterable[A]? Например:Scala Мне нужно преобразовать в Seq при создании коллекции из итерабельного?

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

Может кто-нибудь объяснить, почему это необходимо, чтобы создать неизменный набор через Seq (или, если это не так, то как я это делаю)?

ответ

3

В основном потому, что вы создаете неизменяемый набор через «канонический заводский метод», применяются в компаньонном объекте Set, который принимает последовательность или «varargs» (как в Set (a, b, c)). См. Следующее:
http://scala-tools.org/scaladocs/scala-library/2.7.1/scala/collection/immutable/Set$object.html

Я не думаю, что в стандартной библиотеке есть еще одна.

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() 
+0

Я сожалею, я не очень понимаю вашу точку зрения. Мой вопрос заключался в том, почему конвертировать из Iterable в неизменяемую коллекцию (кроме как через Seq) было непросто. Очевидно, вы предоставили мне коллекцию только для чтения; не неизменный –

+0

Да, это только для чтения ... Разве это не синоним неизменяемости? Может быть, не всегда ... но в этом случае? Вы знаете способ изменить эту коллекцию? Это единственный интерфейс для него, и он доступен только для чтения. Нет, это никогда не изменится. –

Смежные вопросы