[英]What does ()=> mean in Scala?
I understand that a "call by name" argument is defined as foo(arg: => T)
but, what does this mean? 我知道“按名称呼叫”参数定义为
foo(arg: => T)
,但这意味着什么?
def foo(block: => T) = {
List(1, 2, 3).map(_ => ()=>block)
}
Specially I don't understant the ()=>
part. 特别地,我并不理解
()=>
部分。
Wouldn't it be enough to write map(_ => argByName)
? 编写
map(_ => argByName)
还不够吗?
It's a function literal 这是一个函数字面量
scala> val f = () => 1
f: () => Int = <function0>
scala> f()
res0: Int = 1
map(_ => block)
would evaluate block
immediately; map(_ => block)
将立即评估block
; by keeping it as a function we keep it lazy, which matters if we pass a block
with side effects. 通过将其保留为函数,我们可以使其保持惰性,这对于传递带有副作用的程序
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((), (), ())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.