对此Scala语法感到困惑

时间:2014-07-23 04:09:11

标签: scala

有人可以解释一下这段代码:

val ns: Iterator[Int] = (1 to 3).iterator
ns.map(_ => () => block) 

其中

block: => Future[T]

基本上我只是对_=>和单位()语法的内容感到困惑。我试图读取它的方式是'我们映射一个函数,它返回一个不占用参数的函数,并在整数列表中返回一个Future [T]。它是否正确?当我连续看到多个=>运算符时,我总是感到困惑。

2 个答案:

答案 0 :(得分:2)

是的,你是对的。

它解析如下:

ns.map(_ => (() => block))

() => ?语法只是定义无参数函数:

val f = () => 1
f()  // 1

因此ns中的整数被忽略,你只需要一个不带参数的函数迭代器并返回Futures:Iterator[() => Future[T]]

答案 1 :(得分:0)

我认为阻止:=>未来[T] 可能是该方法的签名。这意味着按名称呼叫。基本上,你可以理解它只是一个类型Future [T],它是懒惰评估但不是函数

val ns: Iterator[Int] = (1 to 3).iterator
ns.map(_ => () => block) 

这将返回Iterator [()=>未来],是的,你是对的,这个变换为一个对Future没有任何作用的函数。这样做的好处是它不会立即评估Future,它会在你调用时被调用。

val result = ns.map(_ => () => block)

result.foreach(_())