在SO中提到以下问题,将Unit
传递给函数而不是()
或反之亦然?
答案 0 :(得分:1)
据我所知,你想知道这两个方法定义之间有什么区别,以及为什么会在函数参数中使用Unit over()。
def func1(f:Unit=>String) = {
println(f)
}
def func2(f:()=>String) = {
println(f)
}
通过查看此代码的输出可以突出显示差异:
func1(Unit => "hello")
func2(() => "hello" )
你可能会惊讶地看到这个输出:
<function1>
<function0>
Unit =&gt; String实际上是一个带有1个参数的函数。 While()=&gt; String是一个带0参数的函数。
在Scala()中可能意味着两件事
在func2中,它是一个没有参数的函数。
func1中的“Unit”实际上是scala包中的抽象类(其中只有一个值为“Unit”或“()”)。所以当函数Unit =&gt;字符串已定义,我们定义的是一个函数,它将Unit类型的参数作为参数,并返回一个值。不是不带参数的函数。
对代码的最后调整以突出差异:
def func1(f:Unit=>String) = {
println(f(Unit))
}
def func2(f:()=>String) = {
println(f())
//println(f(Unit)) - does not compile
}
func1(Unit => "hello")
func2(() => "hello" )
两次输出你好。
我建议func2或()通常是人们想要的,而不是func1或“Unit”