2017-11-04 3 views
0

私はアッカストリームを学習し、コード内でKeep.leftとKeep.rightが発生しています:ここakkaストリームのKeepは何を意味しますか?

implicit val system = ActorSystem("KafkaProducer") 
implicit val materializer = ActorMaterializer() 

val source = Source(List("a", "b", "c")) 
val sink = Sink.fold[String, String]("")(_ + _) 

val runnable: RunnableGraph[Future[String]] = source.toMat(sink)(Keep.right) 
val result: Future[String] = runnable.run() 

何を意味Keep.rightのでしょうか?

答えて

2

すべてのストリーム処理ステージは、viaMatまたはtoMat(それぞれvia()またはto()とは対照的に)を使用してキャプチャできるマテリアライズドな値を生成できます。コードスニペットでは、source.toMat(sink)を使用すると、ソースとシンクのマテリアライズされた値をキャプチャすることに関心があり、Keep.rightはマテリアライズド値の右側(シンク)を維持していることを示します。 Keep.leftは、左側(つまりソース)に実体化された値を保持し、Keep.bothは両方を保持できるようにします。

詳細は、Akka Streams documentationの関連セクションを参照してください。

1

Keep.leftは、入力値の左(最初)のみを保持します。 Keep.rightは、2つの入力値の右(2番目)しか保持しません。

+1

上記の例の入力値は? –

+1

最初の入力がソースです。 2番目の入力はシンクです。 – erip

関連する問題