Можно ли рассматривать последовательность / пар / просмотр / силу коллекции Scala как нарушение принципа унифицированного возвращаемого типа?

Большая часть сложности реализации фреймворка коллекции возникает из-за того, что Scala может - в отличие от LINQ C # или другой коллекции frameworks - возвращает "лучший" тип коллекции для функций высшего порядка:

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 ) не более безопасен по типам (только при использовании строгих методов), верно?

8
задан soc 12 July 2011 в 11:38
поделиться