Scala- zip with future

Sug*_*Raj 4 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)

}
Run Code Online (Sandbox Code Playgroud)

问题:

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

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

.map(x = x.tail)应该在IDE中显示编译错误,因为尾部操作只能应用于列表而不能用于元组.但它实际上是成功执行的.

用"."执行时的相同语句.之前的zip功能如下:

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

可能是什么原因?

And*_* T. 6

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

这里可以看到一个简单的例子:

val y = 3 to(5).toDouble
Run Code Online (Sandbox Code Playgroud)

#toDouble实际应用到数字5.如果您尝试使用范围中定义的方法,它不会工作.

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

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