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/