私はScalaのimplicit
のアイデアをAkka Streamsに適用するのに苦労します。Akka Streams:なぜGraphDSL.Builderを暗黙的にマークする必要がありますか?
http://docs.scala-lang.org/overviews/core/implicit-classes.htmlによると、Scalaではimplicit
クラスの基本的な考え方は、Helpers._
をインポートして方法times
が暗黙的に利用できるよう、5 times prinln("foo")
ためIntWithTimes
のオブジェクトが作成されていることです。
object Helpers {
implicit class IntWithTimes(x: Int) {
def times[A](f: => A): Unit = {
def loop(current: Int): Unit =
if(current > 0) {
f
loop(current - 1)
}
loop(x)
}
}
}
のは、次の例を考えてみましょう:
val g = RunnableGraph.fromGraph(GraphDSL.create() {
implicit builder: GraphDSL.Builder[Unit] =>
import GraphDSL.Implicits._
val in = Source(1 to 100)
val flow = Flow[Int].map(_ + 1)
val out = Sink.foreach(println)
in ~> flow ~> out
ClosedShape
})
g.run()
は明らかにこれまでのScalaとアッカ、自分の満足のいかない理論に新しいものGraphDSL
のcreate()
を使用すると、それにBuilder
を渡すことによってRunnableGraph
を作成することです。
なぜimplicit
とマークする必要がありますか?たとえGraphDSL.Implicits._
が明示的にインポートされていても、除外された場合、~>
演算子はもう解決できません。
は、非常にありがとうこの詳細な説明の多く!私は暗黙的な変換が(暗黙の)パラメータとしてビルダーを必要とすることに気づくのに充分注意を払っていませんでした。それを指摘してくれてありがとう! – Toaditoad