内部にグラフを作成してカスタム シンクを作成しています。これは、私の質問を示すために私のコードを大幅に簡略化したものです。
def mySink: Sink[Int, Unit] = Sink() { implicit builder =>
val entrance = builder.add(Flow[Int].buffer(500, OverflowStrategy.backpressure))
val toString = builder.add(Flow[Int, String, Unit].map(_.toString))
val printSink = builder.add(Sink.foreach(elem => println(elem)))
builder.addEdge(entrance.out, toString.in)
builder.addEdge(toString.out, printSink.in)
entrance.in
}
私が抱えている問題は、次のような単一の型引数と値引数なしで同じ入力/出力型の Flow を作成することは有効ですが、Flow[Int]
(これはドキュメント全体にあります) 2 つだけを指定することは有効ではありません。型パラメーターとゼロ値パラメーター。
Flow オブジェクトのリファレンス ドキュメントによると、apply
探しているメソッドは次のように定義されています。
def apply[I, O]()(block: (Builder[Unit]) ⇒ (Inlet[I], Outlet[O])): Flow[I, O, Unit]
と言う
指定された create 関数に FlowGraph.Builder を渡すことで Flow を作成します。
create 関数は、作成された Flow の入力ポートと出力ポートに対応する Inlet と Outlet のペアを返すことが期待されます。
非常に単純なフローだと思うものを作成しようとすると、別のレベルのグラフビルダーに対処する必要があるようです。内部ポートをいじる必要のない入力と出力のタイプを変更する Flow を作成する、より簡単で簡潔な方法はありますか? これがこの問題にアプローチする正しい方法である場合、解決策はどのようになりますか?
ボーナス: 入力の型を出力から変更しないフローを簡単に作成できるのはなぜですか?