2016-06-28 3 views
1

にconfromingない配列をパラレル:Scalaは私はスカラ座に比較的新しいですが、私は、私はその型システムと並列コレクションを理解し、私はこのエラーを理解できないと思うのSeq

私は関数に

def myFun(a : Seq[MyType], b : OtherType) : Seq[MyType] = { 
    val parA = a.par 
    def update(q : OtherType)(x : MyType) : MyType = x.updated(q) 
    parA.map(update(b)) 
を持っています

私は

Error:(63, 18) type mismatch; 
found : scala.collection.parallel.ParSeq[MyType] 
required: Seq[MyType] 
    parA.map(update(b)) 
       ^

を言うエラーParSeqSeqのサブタイプであるならば、なぜこの作品がないのですか?

(私はこれを書いていたので、修正するには.seqメソッドを呼び出すことができますが、どうしてですか?そして、IDEが私に指示する.toSeqの違いは何ですか?.seq

答えて

4

If ParSeq is a sub-type of Seq then why doesn't this work?

これはありません。 ParSeqはサブタイプGenSeqです。これは同じものではありません。違いは、Seqがある場合、すべての操作が順番に実行されることを期待しますが、必ずしもそうである必要はありません。ParSeqです。

は私が持っている場合:

Seq(1, 2, 3, 4, 5) foreach println 

私は、要素が、彼らはすべての時間を提示されている順序で印刷されることを期待します。 ParSeqはそれを保証することはできません。

したがって
scala> ParSeq(1, 2, 3, 4, 5) foreach println 
2 
1 
3 
4 
5 

、私はSeqを期待し、代わりにいくつかの厄介なバグを引き起こす可能性が上記の動作を持っていたParSeqを得た場合。それが気にせず、どちらの状況にも対応できる場合は、GenSeqをお尋ねください。

+0

私は答えを完全に理解していますが、Scalaライブラリ2.11.8では以下のようになっています: 'trait ParSeq [+ T] scala.collection/*。immutable * /。GenSeq [T] ParSeqLike [T、ParSeq [T]、scala.collection.immutableとscala.collection.parallel.ParSeq [T] ParIterable [T] GenericParTemplateと と[T、ParSeq] 有します。配列[T] {オーバーライドDEFコンパニオン:ParSeq [T] =この :GenericParCompanion toSeq DEF [ParSeq] = ParSeq オーバーライドとGenericCompanion [ParSeq]} ' そうParSeqは配列に混合します。または私は間違っていますか? – longliveenduro

+0

@longliveenduro 'Seq'は' ParSeqLike'ミックスインの型パラメータの1つですが、 'ParSeq'はそれを直接混合しません。 –

4

私はdocsを探していますが、ParSeqがSeqを拡張している場所を見ることができません。何か不足していますか?

質問の2番目の部分については、 toSeqはParSeqを返し、seqはSeqを返します。 は明確にするには、次の

val x: ParSeq[Int] = Seq(1,2,3).par 
val y: ParSeq[Int] = x.toSeq 
val z: Seq[Int] = x.seq 

.toSeqはあなたのIDEはその冗長を言っている「何かを行う」しませんので。

+1

私はtoSeq vs seqを参照してください。そして、私はGenSeqとSeqの違いを誤解していたと思います。しかし、ドキュメントは "並列配列はSeqの特性を継承する"と言うので、私はまだ混乱しています – marisbest2

+1

最初の行....私はそれを逃した。私はそれがドキュメントの間違いだと思うし、 "並列配列はGenSeqの特性を継承する"と言っていたと思う。 mzの答えは、ParSeqがSeqを拡張できない理由を示しています –

関連する問題