akka 源代码.合并不接受varargs?

dl5txlt9  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(108)

Akka是在试图传达Source.combine不应该与源代码集合一起使用吗?还是我在函数定义上有些愚蠢?
Akka Source.combine要求在vararags之前有第一个和第二个源。函数定义如下:

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(_))

我不知道我的sources是否会有1个、2个或多个源代码。所以写案例会增加几行代码。这不是什么大问题,但我觉得我遗漏了一些东西。这是akka流的反模式吗?

z9smfwbn

z9smfwbn1#

模式first: Source[T, _], second: Source[T, _], rest: Source[T, _]*的目的是确保至少向方法传递2个(可能更多)源代码。
如果方法签名允许sources:_*,则可以传递空vararg或仅传递单个元素。
在您的示例中,如果sources是Seq,我只会对源进行模式匹配,将其拆分为第一个和第二个元素以及其余元素:

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

相关问题