Scalaでは、タイプList[Future[T]]
の変数をFuture[List[T]]
に変換したいと考えています。Future.sequenceはどのように機能しますか?
Future.sequence
を使用することができます。
Future.sequence
はどのように実装されていますか?
Scalaでは、タイプList[Future[T]]
の変数をFuture[List[T]]
に変換したいと考えています。Future.sequenceはどのように機能しますか?
Future.sequence
を使用することができます。
Future.sequence
はどのように実装されていますか?
/** Simple version of `Futures.traverse`.
* Transforms a `TraversableOnce[Future[A]]` into a `Future[TraversableOnce[A]]`.
* Useful for reducing many `Future`s into a single `Future`.
*/
def sequence[A, M[X] <: TraversableOnce[X]]
(in: M[Future[A]])
(implicit cbf: CanBuildFrom[M[Future[A]], A, M[A]],
executor: ExecutionContext): Future[M[A]] = {
in.foldLeft(successful(cbf(in))) {
(fr, fa) => for (r <- fr; a <- fa) yield (r += a)
}.map(_.result())(InternalCallbackExecutor)
}
それはPromise.successful
を用いfoldLeft
ためのシードFuture
を作成し、終了時に累積の結果をもたらす、配列内のすべての先物を蓄積するCanBuildFrom
を使用します。
私が行ったように 'CanBuildFrom'と混乱しているなら、[Programming in Scala](http://www.artima.com/shop/programming_in_scala_3ed)の第25章をお勧めします。 –
基本的に 'foldLeft'はアキュムレータとして成功し、' Future.scala'のソースコードをチェックします。 –
https://github.com/scala/scala/blob/2.12.x/src/library/scala/concurrent/Future.scala#L663 –
ご覧になる前に、自分で実装しようとしないのはなぜですか? –