2014-10-10 128 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