我理解"呼叫名字"参数定义为foo(arg: => T)
,但这是什么意思?
def foo(block: => T) = {
List(1, 2, 3).map(_ => ()=>block)
}
特别是我不了解()=>
部分。
编写map(_ => argByName)
答案 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((), (), ())