如何统一pimp Akka流的流量和来源?

时间:2016-02-10 05:38:42

标签: akka-stream

我能够独立地对流量和源进行操作,但无法找到让两种方法都能运行相同代码的方法。

implicit class FlowOps[In, Out, M](self: Flow[In, Out, M]) {
  def scan1(f: (Out, Out) => Out): Flow[In, Out, M] = self
    .prefixAndTail(1)
    .flatMapConcat { case (Seq(head), tail) =>
      tail.scan(head)(f)
    }

1 个答案:

答案 0 :(得分:2)

您可以使用FlowOpsMat代替Flow

implicit class FlowOps[Out, M](self: FlowOpsMat[Out, M]) {
  def scan1(f: (Out, Out) => Out): FlowOpsMat[Out, M] = self
    .prefixAndTail(1)
    .flatMapConcat { case (Seq(head), tail) =>
      tail.scan(head)(f)
    }
}

//following works:
Source.single(42).scan1(_+_)
Flow[Int].scan1(_+_)

请注意,返回类型不会以这种方式保留,而是Source / Flow,而不是FlowOpsMat。但这是最简单的方法。