目前还不清楚的是,在惰性评估和其他好处(如果有的话)方面,名称参数优于匿名函数的优势是什么:
def func1(a: => Int)
def func2(a: () => Int)
Run Code Online (Sandbox Code Playgroud)
什么时候应该使用第一个和第二个?
这不是=>,()=>和Unit =>之间差异的副本
任何人都可以通过Scala编译器对名称参数=> T和Function0参数如何() => T相互转换给出明确的答案吗?我知道它们不一样,但差异非常微妙,因为它们可以在许多情况下互换使用.
示例:如果我定义
def someFunction: Int = 2
def f(x: => Int): Unit = println(x)
Run Code Online (Sandbox Code Playgroud)
然后我可以成功打电话
f(2)
f(someFunction)
Run Code Online (Sandbox Code Playgroud)
如何() => Int替代=> Int?
更一般地说,是() => T一个普遍接受的名字=> T参数的替代品?
另外,请纠正我,如果我错了以下的理由:=> T是从来没有一个可以接受的替代() => T,因为第一个是值类型(T),另一种是功能型.也就是说,如果我有def f(x: () => Int),我永远无法通过的Int,或懒惰Int(甚至没有任何意义,因为没有懒惰的类型).