2017-05-16 3 views
0

Dieser Code:Sequenz von Futures in Scala ist leer

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) 
} 

druckt:

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

Was ist die Bedeutung des futures Variable ist? Warum ist es eine Liste leerer Listen? Sollte es nicht ein Seq[Future[Int]] wie erklärt sein?

+0

ist Ihre Zukunft 'scala.concurrent.Future' auftauchen? –

Antwort

0

Das scheint eigentlich gut für mich zu funktionieren.

Es zeigt

[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) 

innen Scalatest Laufen mit einem benutzerdefinierten Logger, der nur tut

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

aus Drucken einer Seq wandelt sie in eine Liste, wenn Sie einfach println versuchen ("someSeq: "+ Seq()) es wird immer noch eine Liste sein. Dies liegt wahrscheinlich daran, dass Java keine Seq hat, so dass es in den nächsten Ahnentyp konvertiert wird.


Wie @CyrilleCorpe in den Kommentaren darauf hingewiesen, sind unvollständig Future s nicht in der REPL angezeigt und als leere List s

+0

Warum 'Zukunft ()' als 'List()' gedruckt wird? – ps0604

+0

Dies sind die Importe: 'import scala.concurrent._' und ' import scala.concurrent.ExecutionContext.Implicits.global' – ps0604

+1

In REPL werden unvollständige 'Futures' als 'List()' ausgedruckt. –