Большая часть сложности реализации фреймворка коллекции возникает из-за того, что 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
) не более безопасен по типам (только при использовании строгих методов), верно?