2016-05-26 15 views
0

を解析ストリーム。私はこの回避策を実行しましたアッカは、私が<code>Source</code>に</p> <pre><code>val flow : FlowOps = Source(1 to 10).map(_+1) </code></pre> <p>を解析したいが、簡単な方法がないように見えるソース

Source.fromGraph(

     GraphDSL.create() { builder => 

     val flow = Source(1 to 10).map(_+1) 

     SourceShape(builder.add(flow).out) 
     } 
    ) 

単純なストリームを再びグラフに変換するために、単純なストリームを変換するために過剰殺しているようです。もっと簡単な方法はありますか?

答えて

2

私が正しく理解している場合はSource[Int, _]の値としてSource(1 to 10).map(_ + 1)を使用しますか?しかし、map()は既に適切なタイプのSourceを返すので、特別なことをする必要はありません。あなただけ

val source = Source(1 to 10).map(_ + 1) 

を書く場合は、sourceはタイプSource[Int, NotUsed]を持つことになります。あなたは明示的に適切な署名を置くことによって簡単に確認できます。

val source: Source[Int, NotUsed] = Source(1 to 10).map(_ + 1) 

私はあなたがすべてでFlowOps型注釈を使用した理由さえわかりません。 FlowOpsは、scaladocが示唆しているように、akka-stream内部APIの一部であり、ライブラリ自体の外部で使用すべきではありません。

+0

私はちょっと混乱しています。私はそれがintellijドキュメントのためだと思います。私が次のようにタイプすると 'Source(1 to 10).map(_。toString)' intellijはこの型を示します: 'Source [Int、NotUsed] #Repr [String]'。それはどういう意味ですか?? – RoberMP

+1

@RoberMPでは、このパターンはScalaコレクションの特性「* Like」に似ています。 'TraversableLike [+ T、+ Repr]'となります。 'Repr'は、特性を実装する型を(大まかに)指定します。あなたが 'Source'ソース(意図していない)を開くと' Repr [O] 'は' Source [O、Mat] 'として定義されています。つまり、あなたと同じマテリアライズドタイプのソース'map()'を別の要素型で呼び出しているかもしれません。 –

+1

@RoberMPこれは 'map()'のような操作が 'Source'と' Flow'の両方によって拡張された 'FlowOps'で定義されているので必要ですが、' flow.map() 'が' Flow' 'source'を返す' source.map() 'を返します。何らかの 'Repr'パターンがなければ、フローとソースに対する操作は非常に不自然で扱いにくい共通の型を返す必要があります。 –

関連する問題

 関連する問題