Scala:如何在未来打印列表

时间:2015-08-18 07:35:54

标签: scala future for-comprehension

请查看以下代码段:

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

object Main extends App {

  ids.foreach { l => println(l.mkString(", ")) }
  for(l <- ids) println(l.mkString(", "))

  def ids = Future(List(1, 2, 3, 4))
}

方法ids返回Future[List[Int]],我想打印返回的List的值:

ids.map { l => println(l.mkString(", ")) } // prints nothing
for(l <- ids) println(l.mkString(", "))    // prints nothing

问题是上面的任何陈述都没有打印List返回的ids的内容。我错过了什么吗?

1 个答案:

答案 0 :(得分:5)

您的报表不会打印任何内容,因为您的程序在运行之前就已退出。如果您等待Future完成,您应该会看到值打印出来。见scala.concurrent.Await.result

E.g。

@ import scala.concurrent._, duration._, ExecutionContext.Implicits._
import scala.concurrent._, duration._, ExecutionContext.Implicits._
@ def ids = Future(List(1,2,3,4))
defined function ids
@ Await.result(ids.map(l => println(l.mkString(", "))), Duration.Inf)
1, 2, 3, 4
@