简体   繁体   English

()=>在Scala中是什么意思?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM