【问题标题】:Why aren't toList and friends deprecated?为什么不弃用 toList 和朋友?
【发布时间】:2013-03-05 02:28:49
【问题描述】:

在 Scala 序列类型 2.10 版本之前,有 toListtoArray 等方法用于从一种类型转换为另一种类型。从 Scala 2.10 开始,我们有 to[_],例如to[List],它似乎包含了toList 和朋友,也使我们能够转换为Vector 等新类型,甚至可能转换为我们自己的集合类型。当然,它使您能够转换为您只知道作为类型参数的类型,例如to[A] -- 不错!

但为什么不弃用旧方法?他们更快吗?是否存在toList 有效但to[List] 无效的情况?我们是否应该在两者都起作用的情况下更喜欢其中一个?

【问题讨论】:

    标签: scala


    【解决方案1】:

    toListTraversableOnce 中实现为to[List],因此不会有任何明显的性能差异。

    然而,toArrayto[Array] 更有效(非常轻微),因为前者分配了一个正确大小的数组,而后者首先创建一个数组,然后设置大小提示(就像它对每个目标集合所做的那样类型)。除非您在紧密循环中将数据转换为数组,否则这在实际应用程序中应该不会产生影响。

    旧方法很容易被弃用,我敢打赌它们将来会被弃用,但人们已经习惯了它们,以至于立即弃用它们可能会让一些人生气。

    【讨论】:

    • toXXX 很容易被覆盖,就像toList 的情况一样,而不仅仅是toArray
    • 确实比覆盖和特殊情况to更容易。
    • 嗯,Samuel,你看起来很年轻——你妈妈知道你在看 Scala 集合源代码吗?
    • @AmigoNico 嘘,别告诉她,否则她可能会停止喂我!
    【解决方案2】:

    问题似乎是您不能在后缀表示法中使用 to[]:

    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)
    

    【讨论】:

    • xs toList 产生警告,不要隐藏那个。
    • @sschaef:如果你做import scala.language.postfixOps则不会
    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    相关资源
    最近更新 更多