2017-05-16 8 views
0

このコード:スカラ座での先物のシーケンスは空で

object TestFutures2 extends App { 

    def double (i:Int) = Future { i * 2 } 

    var futures = Seq[Future[Int]]() 

    for (x <- 1 to 5) { 
      futures = futures :+ double(x) 
    }     

    println("futures: "+futures) 

    Future.sequence(futures).map { 
    result => println("result: "+result) 
    } 

    Thread.sleep(10000) 
} 

プリント:

futures: List(List(), List(), List(), List(), List()) 
result: List(2, 4, 6, 8, 10) 

futures変数の意味は何ですか?なぜそれが空リストのリストですか?それはSeq[Future[Int]]として宣言されるべきではありませんか?

+0

があなたの未来の 'scala.concurrent.Future'されているように、空を表示していませんか? –

答えて

0

これは実際に私にとってうまくいくようです。

それはちょうど配列をプリントアウト

System.out.print(s"[DEBUG ${customTimerMethod}] $message \n") 

を行うカスタムロガーでScalatest内で実行されている

[DEBUG 08:06:45] futures: List(Future(<not completed>), Future(<not completed>), Future(<not completed>), Future(<not completed>), Future(<not completed>)) 
[DEBUG 08:06:45] result: List(2, 4, 6, 8, 10) 

を表示するには、あなたは、単にprintlnをしようとした場合、リストに変換( "someSeq: "+ Seq())はまだリストになります。これは、JavaにはSeqがないため、最も近い祖先型に変換されるためです。


@CyrilleCorpeはコメントで指摘したように、不完全なFuture sがREPLに表示され、List

+0

'Future(<未完了>)が' List() 'として表示されるのはなぜですか? – ps0604

+0

これらはインポートです: 'import scala.concurrent._'と ' import scala.concurrent.ExecutionContext.Implicits.global' – ps0604

+1

REPLでは未完成の 'Future'が' List() 'として出力されます。 –

関連する問題