Scala 在从可迭代创建集合时是否必须转换为 Seq?

发布于 2024-07-15 03:13:10 字数 538 浏览 4 评论 0原文

也许我(再次)喊错了树,但如果通常的做法是将属性类型为 scala.collection.immutable.Set[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
    }
}

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

Perhaps I am barking up the wrong tree (again) but if it is normal practice to have a property typed as a scala.collection.immutable.Set[A], then how would you create one of these given a scala.Iterable[A]? For example:

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

Can someone explain why it is necessary to create the immutable set via a Seq (or if it is not, then how do I do it)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

∞琼窗梦回ˉ 2024-07-22 03:13:10

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

我认为标准库中没有另一个可以做到这一点。

Basically because you're creating the immutable Set through the "canonical factory method" apply in Set's companion object, which takes a sequence, or "varargs" (as in Set(a,b,c)). See this:
http://scala-tools.org/scaladocs/scala-library/2.7.1/scala/collection/immutable/Set$object.html

I don't think there is another to do it in the standard library.

温柔戏命师 2024-07-22 03:13:10

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

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

It will make an immutable copy:

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()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文