私は Scala で初めて Futures を使用する作業を行っており、flatMap コンビネータの使用例に取り組んでいます。私はこの議論をフォローしてきました:
http://docs.scala-lang.org/overviews/core/futures.html
具体的には、この例:
val usdQuote = future { connection.getCurrentValue(USD) }
val chfQuote = future { connection.getCurrentValue(CHF) }
val purchase = for {
usd <- usdQuote
chf <- chfQuote
if isProfitable(usd, chf)
} yield connection.buy(amount, chf)
purchase onSuccess {
case _ => println("Purchased " + amount + " CHF")
}
これに翻訳されます:
val purchase = usdQuote flatMap {
usd =>
chfQuote
.withFilter(chf => isProfitable(usd, chf))
.map(chf => connection.buy(amount, chf))
}
私が把握するのに少し苦労しているのは、これがいつどのように flatMap を実行するかです。
usdQuote と chfQuote は「ある時点」で「あるスレッド」によって実行され、登録されたコールバック関数が呼び出されることを理解しています。質問は次のとおりです。
a) usdQuote と chfQuote は同時に実行されますか? (私は彼らがそうであると確信しています)。
b) flatMap は Future useQuote の値を usd にどのように割り当てますか? 同様に、操作 usdQuote が完了すると呼び出されますか?
c) 'flatMap' および 'map' 操作を実行しているスレッドはどれですか (おそらく、最後の質問の続きです)。
乾杯。