给出以下用于在Scala中定义函数的结构体,请解释它们之间的区别以及其影响是什么。
def foo = {}
对比。
def foo() = {}
更新
感谢快速回复,非常好的解答。对我来说仅剩的问题是:
如果我省略括号,是否仍有办法传递函数?这是我在repl中得到的结果:
scala> def foo = {}
foo: Unit
scala> def baz() = {}
baz: ()Unit
scala> def test(arg: () => Unit) = { arg }
test: (arg: () => Unit)() => Unit
scala> test(foo)
<console>:10: error: type mismatch;
found : Unit
required: () => Unit
test(foo)
^
scala> test(baz)
res1: () => Unit = <function0>
更新 2012-09-14
我发现了一些类似的问题:
def
关键字定义的是一个方法,而不是函数,尽管它们之间的区别可能很微妙。可以将其与 Java 中的int
vsInteger
相类比:前者可以自动装箱为后者。 - Kevin Wright