scala - Source.combine 不接受可变参数?

标签 scala akka akka-stream

Akka 是否试图表明 Source.combine 不应该与源集合一起使用?或者我在函数定义方面有点愚蠢?

Akka Source.combine 需要在可变参数之前有第一个和第二个源。函数定义如下:

def combine[T, U](first: Source[T, _], second: Source[T, _], rest: Source[T, _]*)(
      strategy: Int => Graph[UniformFanInShape[T, U], NotUsed]

我想做这样的事情:

val sources : Seq[Source[Int,_]] = ???
Source.combine(sources:_*)(Merge(_))

我不知道我的来源是否有 1,2 个或多个来源。所以写案例就增加了几行。没什么大不了的,但我觉得我错过了一些东西。这是 akka 流的反模式吗?

最佳答案

模式的要点 first: Source[T, _], secondary: Source[T, _], rest: Source[T, _]* 是确保您至少通过2 个(可能更多)方法来源。

如果方法签名允许sources:_*,您可以传递空的可变参数或仅传递单个元素。

在你的情况下,如果源是Seq,我只会对源进行模式匹配以分为第一个和第二个元素以及其余元素:

sources match {
   case first :: second :: rest => Source.combine(first, second, rest:_*)(Merge(_))
   case _ => ??? // too few elements, maybe return Source.failed?
}

关于scala - Source.combine 不接受可变参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65297528/

相关文章:

Scala - 扩展与

ruby - 对 Thrift 感到困惑,它到底有什么作用?

scala - 跳过无限流中的错误

java - 了解 akka 流中的背压 Source.queue

scala - 如何将 Source[ByteString, Any] 转换为 InputStream

scala - 如何使用 Akka-HTTP 客户端 websocket 发送消息

scala - 基于代理/参与者的并发设计的设计模式

json - Scala、Akka、喷雾 : How to validate json data before processing?

json - 使用 Akka Stream 流式传输巨大的 json

scala - 在 Scala 中定义期间自引用 val