Source<Out,Mat> 的类型参数是什么意思?
What do the type parameters to Source<Out,Mat> mean?
我正在尝试了解指定的 Akka 流的源类型 here。
不幸的是,我找到的文档和示例没有解释每个类型参数的实际含义。我猜 Out
是源在具体化时发出的类型。那是对的吗?其他类型参数 Mat
是什么?
出
你是对的,这是 Source
发出的元素的类型。
垫子
这是Source
实体化的类型。请注意,每个阶段(Flow
s、Sink
s 等)也会具体化为一个值。
这本质上是舞台本身的副产品 在 之后是 运行。
您可以将其想象成在 运行ning 时与舞台互动的一种方式。查看 Akka 提供的现成 Source
示例是了解其要点的好方法。
Source.single
将实现 NotUsed
。您无法与源进行交互,因为它只会直接生成一个元素然后完成。
Source.queue
将具体化为 SourceQueue
。这是一个更有趣的案例,因为您可以通过 offer
发送消息与源进行交互。您 offer
的消息将由源发出。
Source.maybe
将具体化为 Promise
。您可以使用 Promise
来控制源并使其发出一个元素,或者 None
.
当您连接不同的阶段时,请注意每个阶段都可能具有有用的物化值。您可以使用 viaMat
/toMat
和 Keep
DSL 选择要保留的内容。
当在组合图上调用 run()
时,将返回一个或多个物化值。
查看下面示例中的类型是了解 API:
要点的最佳方式
val source: Source[Int, MatSrc]
val sink: Sink[Int, MatSnk]
val matSrc: MatSrc = source.toMat(sink)(Keep.left).run()
val matSnk: MatSnk = source.toMat(sink)(Keep.right).run()
val (m1: MatSrc, m2: MatSnk) = source.toMat(sink)(Keep.both).run()
val n: NotUsed = source.toMat(sink)(Keep.none).run()
请注意,您可以在许多示例中找到更简洁的 DSL 实际上是上述的快捷方式,其中仅保留最后阶段(例如接收器)的物化值。
val mat3: Mat3 = source.viaMat(flow)(Keep.right).toMat(sink)(Keep.right).run()
与
相同
val mat3: Mat3 = source.via(flow).runWith(sink)
请参阅下面的文档以进一步阅读。
http://doc.akka.io/docs/akka/2.4/java/stream/stream-quickstart.html#Materialized_values
我正在尝试了解指定的 Akka 流的源类型 here。
不幸的是,我找到的文档和示例没有解释每个类型参数的实际含义。我猜 Out
是源在具体化时发出的类型。那是对的吗?其他类型参数 Mat
是什么?
出
你是对的,这是 Source
发出的元素的类型。
垫子
这是Source
实体化的类型。请注意,每个阶段(Flow
s、Sink
s 等)也会具体化为一个值。
这本质上是舞台本身的副产品 在 之后是 运行。
您可以将其想象成在 运行ning 时与舞台互动的一种方式。查看 Akka 提供的现成 Source
示例是了解其要点的好方法。
Source.single
将实现NotUsed
。您无法与源进行交互,因为它只会直接生成一个元素然后完成。Source.queue
将具体化为SourceQueue
。这是一个更有趣的案例,因为您可以通过offer
发送消息与源进行交互。您offer
的消息将由源发出。Source.maybe
将具体化为Promise
。您可以使用Promise
来控制源并使其发出一个元素,或者None
.
当您连接不同的阶段时,请注意每个阶段都可能具有有用的物化值。您可以使用 viaMat
/toMat
和 Keep
DSL 选择要保留的内容。
当在组合图上调用 run()
时,将返回一个或多个物化值。
查看下面示例中的类型是了解 API:
要点的最佳方式 val source: Source[Int, MatSrc]
val sink: Sink[Int, MatSnk]
val matSrc: MatSrc = source.toMat(sink)(Keep.left).run()
val matSnk: MatSnk = source.toMat(sink)(Keep.right).run()
val (m1: MatSrc, m2: MatSnk) = source.toMat(sink)(Keep.both).run()
val n: NotUsed = source.toMat(sink)(Keep.none).run()
请注意,您可以在许多示例中找到更简洁的 DSL 实际上是上述的快捷方式,其中仅保留最后阶段(例如接收器)的物化值。
val mat3: Mat3 = source.viaMat(flow)(Keep.right).toMat(sink)(Keep.right).run()
与
相同 val mat3: Mat3 = source.via(flow).runWith(sink)
请参阅下面的文档以进一步阅读。
http://doc.akka.io/docs/akka/2.4/java/stream/stream-quickstart.html#Materialized_values