2013-03-04 48 views
9

在此之前的Scala序列類型的2.10版本有像toListtoArray方法從一種類型轉換爲另一種。從Scala 2.10開始,我們有to[_],例如to[List],這似乎歸入toList和朋友,也給我們轉換到新的類型,如Vector想必連我們自己的集合類型的能力。當然,它使您能夠轉換爲僅作爲類型參數而知道的類型,例如to[A] - 不錯!爲什麼不要toList和朋友棄用?

但是,爲什麼不老的方法已過時?他們更快嗎?有沒有toList工作但to[List]沒有的情況?我們應該更喜歡哪一個在兩者都有效?

回答

7

toListTraversableOnce中實現爲to[List],所以不會有明顯的性能差異。

然而,toArray是(非常輕微)比to[Array]更有效,因爲前者分配大小合適的陣列,而後者首先創建一個數組,然後將大小設置提示(因爲它爲每一個目標集合類型)。這不應該在真正的應用程序中發揮作用,除非您將數據轉換爲緊密循環中的數組。

舊的方法很容易被棄用,但我敢打賭,他們在未來將,但人們習慣了他們,他們自嘲馬上很可能會令一些人憤怒。

+3

'toXXX'可以很容易地被覆蓋,就像是['toList'(HTTPS的情況:// github.com/scala/scala/blob/v2.10.0/src/library/scala/collection/immutable/List.scala#L196),不僅適用於'toArray'。 – sschaef 2013-03-04 19:05:09

+0

事實上,它比覆蓋和特殊情況下更容易。 – 2013-03-04 19:13:19

+1

嗯,塞繆爾,你看起來非常年輕 - 你媽媽知道你在看斯卡拉集合的源代碼嗎? – AmigoNico 2013-03-05 03:03:33

2

在問題似乎是,你不能在後綴符號使用[]:

scala> Array(1,2) toList 
res2: List[Int] = List(1, 2) 

scala> Array(1,2) to[List] 
<console>:1: error: ';' expected but '[' found. 
     Array(1,2) to[List] 

scala> Array(1,2).to[List] 
res3: List[Int] = List(1, 2) 
+2

'xs toList'會產生一個警告,不要隱藏那個。 – sschaef 2013-03-04 19:11:49

+3

@sschaef:如果你執行'import scala.language.postfixOps' – BeniBela 2013-03-04 20:09:16

相關問題