scala.seq vs.toSeq

scala.seq vs.toSeq,scala,collections,seq,Scala,Collections,Seq,在Scala文档中,集合上同时定义了.seq和.toSeq方法。它们之间有什么区别,为什么两者都存在?我无法通过阅读Scala collection文档来理解它。假设我有一个并行集合: val myParList = List(1, 2, 3, 4).par scala> myParList.seq.foreach(println) 1 2 3 4 现在,此集合上的map等操作将并行运行。通常这很好,因为这意味着事情做得更快,但有时确实需要对元素执行某种副作用操作,然后并行运行可能会导

在Scala文档中,集合上同时定义了.seq和.toSeq方法。它们之间有什么区别,为什么两者都存在?我无法通过阅读Scala collection文档来理解它。

假设我有一个并行集合:

val myParList = List(1, 2, 3, 4).par
scala> myParList.seq.foreach(println)
1
2
3
4
现在,此集合上的
map
等操作将并行运行。通常这很好,因为这意味着事情做得更快,但有时确实需要对元素执行某种副作用操作,然后并行运行可能会导致问题:

scala> myParList.foreach(println)
1
4
3
2
.seq
允许您通过要求操作按顺序运行(无需复制集合内容)来修复此问题:


实际上,它只是撤销了
.par
.toSeq
不提供相同的保证,一般来说,它只对
GenTraversableOnce
的子类有用,这些子类还没有
Seq
s.

repl中的实验显示了一个区别:

scala> val l = List(1,2,3)
l: List[Int] = List(1, 2, 3)

scala> l.seq
res2: scala.collection.immutable.LinearSeq[Int] = List(1, 2, 3)

scala> l.toSeq
res3: scala.collection.immutable.Seq[Int] = List(1, 2, 3)

OP说他们已经阅读了API文档,其中明确指出了返回类型的差异,所以我不确定这是否会有帮助。总之,你可以将
.toSeq
看作是缩写
。toSequence
。seq
看作
。toSequential