Akka Stream SubFlow(路径依赖泛型)隐式类编译问题求助
解决方案
正确隐式类代码
import akka.stream.scaladsl.SubFlow import akka.stream.FlowOps implicit class SideEffectfulSubFlowOps[Out, Mat, F[+_], C](val enrichedSubFlow: SubFlow[Out, Mat, F, C]) extends AnyVal { /** 执行副作用且不修改流元素。 * 与[[SubFlow.alsoTo]]和[[SubFlow.wireTap]]不同,该操作在背压、并发层面的语义与[[SubFlow.map]]完全一致 */ def withSideEffect(f: Out => Unit): enrichedSubFlow.Repr[Out] = { enrichedSubFlow.map { o => f(o) o } } }
原代码报错原因
- 额外引入了不必要的
FOps类型参数,SubFlow的第三个泛型参数本身就是对应FlowOps的Repr高阶类型,不需要通过FOps#Repr间接引用 - Scala编译器无法从实际传入的
SubFlow实例反向推导出FOps的具体类型,导致类型匹配失败
效果验证
调整后你期望的链式调用写法可以直接正常编译:
val got = Source(List("1", "2", "3")) .groupBy(1, f) .withSideEffect((elem: String) => recordedItems.add(elem)) .mergeSubstreams .to(Sink.seq)
内容的提问来源于stack exchange,提问作者leozilla
相关产品推荐
相关产品推荐

