Scala 阿克卡河托马特酒店
我试图理解在阿卡流媒体中toMat做了什么。例如:Scala 阿克卡河托马特酒店,scala,akka,streaming,akka-stream,Scala,Akka,Streaming,Akka Stream,我试图理解在阿卡流媒体中toMat做了什么。例如: val sink1:Sink[Int, Future[Int]]=Sink.fold[Int,Int](0)(_ + _) val flow=Flow[Int].fold[Int](0){(x,y)=> x+y} val runnable = Source (1 to 10).viaMat(flow)(Keep.right).toMat(sink1)(Keep.both) viaMat vs via有什么用 托马特在维亚马特和托马特
val sink1:Sink[Int, Future[Int]]=Sink.fold[Int,Int](0)(_ + _)
val flow=Flow[Int].fold[Int](0){(x,y)=> x+y}
val runnable = Source (1 to 10).viaMat(flow)(Keep.right).toMat(sink1)(Keep.both)
通过[T,Mat2]覆盖def(flow:Graph[FlowShape[Out,T],Mat2]):Repr[T]=viaMat(flow)(Keep.left)
(a:a,b:b)=>(a,b)
的别名,这是一个接受两个输入参数并将它们作为元组返回的函数。用于在组合两个流(或源与流或流与汇等)时,具有左右两侧的物化值// you're keeping the materialized value of flow
val source2 = Source (1 to 10).viaMat(flow)(Keep.right)
// you're keeping both materialized values, i.e. the one of flow from previous step
// and the one o sink.
val runnableGraph = source2.toMat(sink)(Keep.both)
runnableGraph.run() // returns a tuple (flowMatVal, sinkMatVal)
当连接流的两个部分(即源和流/汇或流和汇)时,它们中的每一个都有一个在运行流时得到的物化值。与via/to组合时的默认行为是保留左侧。如果您使用viaMat/toMat,您可以选择保留正确的物化值,或者将它们作为元组保存。我可以从akka用户组获得一些详细信息
它应该按以下方式返回(保持两个Mat)val可运行:RunnableGraph[(Promise[Option[Int]],Future[Int])]=Source(1到10)。viaMat(flow)(Keep.right)。toMat(sink1)(Keep.tware)。run()谢谢。我不能理解具体化的值,我知道源正好是一个输出,而汇正好是一个输入,这里是什么?下面的代码假定返回正确的元组。。。你能帮我怎么打印吗:val source1=Source(1到10)val sink:sink[Int,Future[Int]]=sink.fold[Int,Int](0)(uu+)(uu)val runnableGraph=source1.toMat(sink)(Keep.both)val x=runnableGraph.run()具体化的值是你在运行nablegraph.run()时得到的值。例如,如果使用Sink.fold,则它是包含折叠结果的未来。读这个:非常感谢。如果我理解正确,我会从中读取物化值-源[+Out,+Mat],流[-In,+Out,+Mat]和汇[-In,+Mat]上的Mat类型参数是运行时。类型参数是编译时已知的。值本身是在运行时运行(也称为物化)流时创建的。你会接受这个答案吗P