我能够独立地对流量和源进行操作,但无法找到让两种方法都能运行相同代码的方法。
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)
}
答案 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
。但这是最简单的方法。