Scala-zip 与 future

标签 scala future scala-collections

下面是我试图理解的代码:

object Tryouts extends App{
    val studentIds= Future{
        List("s1","s2","s3")
    }
    val details = studentIds zip(Future{List("Tim","Joe","Fin")}).map(x=>x.tail)
    details.foreach(println)
    Thread.sleep(1000)

}
问题:

val details = studentIds zip(Future{List("Tim","Joe","Fin")}).map(x=>x.tail)


在这里,如果您注意到,我没有使用“。”在压缩之前,只是给一个空间。我猜可能是 。和空间都以相同的方式工作,并且还验证了一些堆栈溢出问题。应用 map 之前的上述表达式将导致我一个 Future[(List[String],List[String])]。所以当我说

.map(x=x.tail) should show compilation error in IDE because tail operation can be applied only on list and not for tuple. But it is actually executing successfully.

The same statement when executed with "." before zip function like this:

val details = studentIds.zip(Future{List("Tim","Joe","Fin")}).map(x=>x.tail) the map(x=>x.tail) gives error.


可能是什么原因?

最佳答案

当您省略空格(通过替换 . )时,您还必须省略括号,否则编译器会将后面的内容视为初始表达式的一部分 - 在您的情况下为 map(x => x.tail)将应用于Future{List("Tim", "Joe", "Fin")} .

一个简单的例子可以在这里观察到:

val y = 3 to(5).toDouble
#toDouble实际上应用于数字 5。如果您尝试使用范围定义的方法,它将不起作用。

回到你的代码,如果你删除 .在尾调用之前,您将收到预期的编译错误:

val details = ids zip Future.successful(List("Tim", "Joe", "Fin")) map (_.tail)
// compile error: "Cannot resolve symbol tail"

关于Scala-zip 与 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43042765/

相关文章:

scala - Spark saveAsTextFile 到 Azure Blob 创建一个 blob 而不是文本文件

java - 如何组合 Observables 以避免给定的嵌套和依赖回调?

stream - 一旦其中一个底层流耗尽,就使流组合耗尽

scala - 如何获取第一个成功完成的Future?

scala - 如何在Scala中创建以下map的map

list - 如何扩展 Scala 列表以启用不是按显式位置而是按给定谓词/条件的切片

scala - 在 Scala 2.8 中打包私有(private)修饰符

scala - 从两个 boolean 值构建字符串

list - 如何获取在 Scala 的列表中多次出现的所有元素的集合?

scala - 过滤字符串序列直到在scala中找到键的功能方法