- C# 'ın LINQ veya diğer toplama çerçeveler aksine - yüksek mertebeden işlevleri için 'en iyi' koleksiyon türü dönmek:Can Scala koleksiyonunun seq/par/view/force, tek tip dönüş tipi prensibinin ihlali olarak görülüyor mu?
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)
Neden bunu yapar Prensip seq
, par
, view
, force
gibi yöntemlere uymuyor mu?
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)
Çalışmasını engelleyen bir teknik sınırlama var mı? Yoksa tasarım/niyetle mi? LINQ temelde tembel olduğunu düşünürsek, Scala'nın eşdeğeri (view
, force
) daha güvenli değildir (yalnızca katı yöntemleri kullanırken), değil mi?
“Tembel”/“görünüm” den ne haber? Buna benzer problemler var mı? E. g. Vector (1,2,3) .view.map (2 *) 'niçin neden zorlanır? Seq [Int] = Vector (2, 4, 6) '? – soc
Başımın üst kısmından, bunun 'map' olması gerekir - "SeqView" arkadaşı nesnesinde bulunan örtük "CanBuildFrom" çözüldüğünde tür bilgisi kaybolur. Benim tahminim, "canBuildFrom" yönteminin "ForcedCollection" türünde bir ek parametre alması ve "CanBuildFrom" - "SeqView [A, ForcedCollection]" türünün hedef türüne yerleştirilmesi ve "SeqView [A, Sekans [_]] '. Yine de işe yarayıp yaramadığını görmek için etrafta oynamamıştım. – axel22