【发布时间】:2018-02-19 20:55:21
【问题描述】:
我对@987654321@ 官方托管的这个示例代码有几个问题:
val topHeadSink = Sink.head[Int]
val bottomHeadSink = Sink.head[Int]
val sharedDoubler = Flow[Int].map(_ * 2)
RunnableGraph.fromGraph(GraphDSL.create(topHeadSink, bottomHeadSink)((_, _)) { implicit builder =>
(topHS, bottomHS) =>
import GraphDSL.Implicits._
val broadcast = builder.add(Broadcast[Int](2))
Source.single(1) ~> broadcast.in
broadcast.out(0) ~> sharedDoubler ~> topHS.in
broadcast.out(1) ~> sharedDoubler ~> bottomHS.in
ClosedShape
})
- 您何时通过
create传递图表?
为什么topHeadSink, bottomHeadSink是通过create传入的,而sharedDoubler不是?它们有什么区别?
- 什么时候需要
builder.add?
我可以在没有builder.add 的情况下在图表外创建广播吗?如果我在图表中添加几个流,我是否也应该通过builder.add 添加流?有时我们需要 builder.add 而有时不需要,这非常令人困惑。
更新
我觉得这仍然令人困惑:
这些方法之间的区别在于,使用builder.add(...) 导入会忽略导入图的物化值,而通过工厂方法导入则允许包含它。
topHS, bottomHS 是从create 导入的,因此它们将保留其物化值。如果我做builder.add(topHS)怎么办?
你如何解释sharedDoubler:它是否具有物化价值?如果我使用builder.add 怎么办?
-
((_,_))的GraphDSL.create(topHeadSink, bottomHeadSink)((_, _))是什么意思?
它看起来像我们只需要的样板,但我不确定它是什么。
【问题讨论】:
标签: scala akka akka-stream