给定以下用于在Scala中定义函数的构造,您能解释一下它们之间的区别,以及它们的含义是什么?
def foo = {}
Run Code Online (Sandbox Code Playgroud)
与
def foo() = {}
Run Code Online (Sandbox Code Playgroud)
更新
感谢您的快速回复.这些都很棒.对我来说唯一的问题是:
如果我省略括号,是否还有办法传递函数?这是我在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>
Run Code Online (Sandbox Code Playgroud)
更新2012-09-14
以下是我注意到的一些类似问题:
jvm programming-languages functional-programming scala jvm-languages
我正在观看Runar Bjarnason的初学者函数式编程,并在14:45他定义了一个方法:
def isDivisibleBy(k: Int): Int => Boolean = i => i % k == 0
Run Code Online (Sandbox Code Playgroud)
和功能:
val isEven = isDivisibleBy(2)
Run Code Online (Sandbox Code Playgroud)
定义isEven为函数而不是方法的优点和缺点是什么?
我已经阅读了Scala函数与方法以及Scala中方法和函数之间的区别,并且我理解语义差异,但我想知道在这种情况下是否有更深层次的原因为什么函数可能或可能不优于使用方法:
def isEven = isDivisibleBy(2)
Run Code Online (Sandbox Code Playgroud) 在Scala中,有两种方法可以定义一个不带参数的方法
1 def a=println("hello")
2 def a()=println("hello")
Run Code Online (Sandbox Code Playgroud)
这两种方法完全相同,但(2)可以使用和不使用括号来调用.
在Scala中是否有任何特殊原因允许使用此功能.它会让我感到困惑,何时使用?