什么()=>斯卡拉意味着什么?

时间:2015-01-30 09:58:31

标签: scala

我理解"呼叫名字"参数定义为foo(arg: => T),但这是什么意思?

def foo(block: => T) = {
  List(1, 2, 3).map(_ => ()=>block)
}

特别是我不了解()=>部分。

编写map(_ => argByName)

是不够的

1 个答案:

答案 0 :(得分:3)

它是一个函数文字

scala> val f = () => 1
f: () => Int = <function0>

scala> f()
res0: Int = 1

map(_ => block)会立即评估block;通过将它保持为函数我们保持懒惰,如果我们传递带有副作用的block,这很重要。

def foo2[T](block: => T) = List(1, 2, 3).map(_ => block)

scala> foo2(println("Hello"))
Hello
Hello
Hello
res1: List[Unit] = List((), (), ())

scala> foo(println("Hello"))
res2: List[() => Unit] = List(<function0>, <function0>, <function0>)

scala> res2.map(_())
Hello
Hello
Hello
res3: List[Unit] = List((), (), ())