2014-10-10 59 views
11

在Scala文档中,集合同时定义了.seq和.toSeq方法。他们之间有什么区别,他们为什么都在那里?我无法从阅读Scala收集文档中发现它。scala .seq与.toSeq

回答

20

假设我有一个平行的集合:在此集合像map

val myParList = List(1, 2, 3, 4).par 

现在操作将并行运行。通常,这是伟大的,因为它意味着的东西得到执行速度更快,但有时候你确实需要对内容进行某些方面影响操作,然后并行运行可能会导致问题:

scala> myParList.foreach(println) 
1 
4 
3 
2 

.seq让你通过要求操作顺序运行(不复制集合的内容)来解决这个问题:

scala> myParList.seq.foreach(println) 
1 
2 
3 
4 

实际上它只是撤销.par.toSeq不提供相同的保证,并且通常它仅在GenTraversableOnce的子类中有用,这些子类尚不是Seqs。

+10

综上所述,你能想到.toSeq'的'作为缩写'.toSequence'和'.seq'为'.toSequential'。 – 2014-10-10 18:42:13

1

实验在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) 
+0

OP表示他们已经阅读了API文档,其中明确指出了返回类型的差异,所以我不确定这会有所帮助。 – 2014-10-10 18:40:56