【发布时间】:2011-06-17 18:18:53
【问题描述】:
集合框架的大部分实现复杂性源于这样一个事实,即 Scala 可以(与 C# 的 LINQ 或其他集合框架不同)为高阶函数返回“最佳”集合类型:
val numbers = List(1,2,3,4,5)
numbers map (2*) // returns a List[Int] = List(2, 4, 6, 8)
val doubles = Array(1.0, 2.0, 3.0)
doubles filter (_ < 3) // returns Array[Double] = Array(1.0, 2.0)
为什么这个原则不适用于seq、par、view、force 等方法?
numbers.view.map(2*).force
// returns Seq[Int] = List(2, 4, 6, 8)
numbers.seq
// returns scala.collection.immutable.Seq[Int] = List(1, 2, 3, 4)
doubles.par.seq
// returns scala.collection.mutable.ArraySeq[Double] = ArraySeq(1.0, 2.0, 3.0)
是否存在阻止其工作的技术限制?
或者这是设计/意图?
考虑到 LINQ 基本上是惰性的,Scala 的等价物(view、force)并不是更安全(仅在使用严格方法时),对吧?
【问题讨论】:
标签: c# linq scala collections types