我已经创建了一个阿卡流具有简单Source,Flow和Sink.有了这个,我可以轻松地通过它发送元素.现在我想改变这个流,以便Flow返回一个Option.取决于Option我想要改变输出的结果Flow.
是否有可能创建这样的结构?
我有一个SourceQueue.当我向它提供一个元素时,我希望它通过它Stream,当它到达时,Sink输出返回到提供此元素的代码(类似于Sink.head返回一个元素到RunnableGraph.run()调用).
我该如何实现这一目标?我的问题的一个简单例子是:
val source = Source.queue[String](100, OverflowStrategy.fail)
val flow = Flow[String].map(element => s"Modified $element")
val sink = Sink.ReturnTheStringSomehow
val graph = source.via(flow).to(sink).run()
val x = graph.offer("foo")
println(x) // Output should be "Modified foo"
val y = graph.offer("bar")
println(y) // Output should be "Modified bar"
val z = graph.offer("baz")
println(z) // Output should be "Modified baz"
Run Code Online (Sandbox Code Playgroud)
编辑:我在这个问题中给出的例子弗拉基米尔马特维耶夫提供了最好的答案.但是,应该注意的是,只有当元素sink按照它们提供给它们的相同顺序进入时,此解决方案才有效source.如果无法保证这一点,则元素的顺序sink可能不同,结果可能与预期的不同.
我昨天安装了一个颜色主题,但丢失了之前包围我正在处理的 SQL 语句的边框。它是图像中查询周围的紫色边框。
我进行了搜索,但找不到定义此颜色的设置。有谁知道我怎样才能拿回这个边框?我认为我安装的主题要么改变了该边框的颜色,要么完全禁用了它。
我一直在关注Akka Streams的快速入门指南,我遇到了一个错误.我的代码很简单:
object Main extends App {
implicit val system = ActorSystem("QuickStart")
implicit val materializer = ActorMaterializer()
val source: Source[Int, NotUsed] = Source(1 to 100)
source.runForeach(i => println(i)) (materializer)
}
Run Code Online (Sandbox Code Playgroud)
但是这会导致错误:
线程"main"java.lang.NoClassDefFoundError中的异常:akka.util.Timeout中的scala/Product $ class.(Timeout.scala:13)akka.actor.ActorSystem $ Settings.(ActorSystem.scala:179)at akka. actor.ActorSystemImpl.(ActorSystem.scala:530)atkka.actor.ActorSystem $ .apply(ActorSystem.scala:142)atkka.actor.ActorSystem $ .apply(ActorSystem.scala:109)at streams_test.Main $ .delayedEndpoint $ streams_test $ Main $ 1(Main.scala:14)at streams_test.Main $ delayedInit $ body.apply(Main.scala:13)at scala.runtime.AbstractFunction0.apply $ mcV $ sp(AbstractFunction0.scala:12)at scala .app.$ anonfun $ main $ 1 $ adapt(App.scala:76)at scala.collection.immutable.List.foreach(List.scala:378)scala.App.main(App.scala:76)at scala. app.main $(App.scala:74)at streams_test.Main $ …
我正在研究对应用程序的可读性有影响的代码味道.我遇到了很长的方法名称,我想知道是否有这样的约定.
我已经检查了scaladocs中的命名约定,但它没有列出任何有关方法名称长度的内容.我还检查了Scalastyle规则并注意到它默认为50.
方法名称的最大长度是否有正式约定,如果有,它有多长时间?
scala ×4
akka ×3
akka-stream ×2
colors ×1
datagrip ×1
method-names ×1
name-length ×1
scalastyle ×1