scala List / Seq上的地图

时间:2017-06-18 22:09:38

标签: scala scala-collections

我有以下简单的代码

private def tt(l:Seq[Int]):Seq[Future[Unit]] = {
    val aa = l.map(_=>Future.successful(()))
    aa
  }

我很容易理解我正在返回的事实Future[Unit] type corresponding to each element of my sequence "l" that is passed to method tt.很容易说"aa"属于Seq[Future[Unit]]类型。我无法理解的是,当我的“l”,序列长度为零时,地图永远不会被执行,为什么以及如何我能够获得Seq [Future [Unit]]因为我有明确地给出了返回类型,并且显然scala很高兴无论什么是“l”即使是空的,“aa”仍然会导致Seq [Future [Unit]]。但是我不明白为什么

1 个答案:

答案 0 :(得分:5)

  

...当我的“l”,序列的长度为零时,地图永远不会被执行....

以上陈述不正确。 map,当调用空序列时, 执行:在空序列上调用map会返回一个空序列。

将空Seq传递给tt时,返回类型确实为Seq[Future[Unit]]。返回的是Seq[Future[Unit]]为空:

scala> def tt(l:Seq[Int]):Seq[Future[Unit]] = {
 |     val aa = l.map(_=>Future.successful(()))
 |     aa
 |   }
tt: (l: Seq[Int])Seq[scala.concurrent.Future[Unit]]

scala> tt(Seq())
res0: Seq[scala.concurrent.Future[Unit]] = List()

在上面的代码中,map l上执行,即使l为空。

在任何类型的空map上调用Seq都是一样的。例如,要将Seq[String]转换为Seq[Int]

scala> Seq[String]().map(_.toInt)
res2: Seq[Int] = List()

在空.map(_.toInt)上调用Seq[String]的结果为空Seq[Int]