2013-03-04 50 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

相关问题