2016-08-20 7 views
2

docは、次の例(唯一の私の質問に関連して何が示されている)があります。私は理由について興味があったアッカストリーム:いいえ、引数GraphDSL.create()GraphDSL.create(シンク)対

val resultSink = Sink.head[Int] 

val g = RunnableGraph.fromGraph(GraphDSL.create(resultSink) { implicit b => sink => 
    import GraphDSL.Implicits._ 

    // importing the partial graph will return its shape (inlets & outlets) 
    val pm3 = b.add(pickMaxOfThree) 

    Source.single(1) ~> pm3.in(0) 
    Source.single(2) ~> pm3.in(1) 
    Source.single(3) ~> pm3.in(2) 
    pm3.out ~> sink.in 
    ClosedShape 
}) 

をシンクは、私はわずかに変形例

val resultSink = Sink.head[Int] 

val g = RunnableGraph.fromGraph(GraphDSL.create() { implicit b => 
    import GraphDSL.Implicits._ 

    // importing the partial graph will return its shape (inlets & outlets) 
    val pm3 = b.add(pickMaxOfThree) 
    val s = b.add(resultSink).in 

    Source.single(1) ~> pm3.in(0) 
    Source.single(2) ~> pm3.in(1) 
    Source.single(3) ~> pm3.in(2) 

    pm3.out ~> s 

    ClosedShape 
}) 

しかし、これはakka.NotUsedFuture[Int]からg.run()の戻り型を変更GraphDSL.createにパラメータとして渡されなければなりません。どうして?

答えて

3

私は自分自身で答えを見つけたと思います。 Acc。 builder.add(...)、それに渡される 青写真のコピーを作成し、 の入口と出口を返します操作を使用して

結果のコピー、彼らはそのように:ドキュメントへ配線することができます。別の代替方法の は、任意の形状の既存のグラフを、 が新しいグラフを生成するファクトリメソッドに渡すことです。これらのアプローチの間の差は、ファクトリメソッドを介してインポート中 (...)builder.add使用インポートは インポートグラフのマテリア値を無視することで、その 包含

g.runはマテリアの値を返すことができグラフ、したがって戻り値の型の変更。

関連する問題