相关疑难解决方法(0)

Scala中def foo = {}和def foo()= {}之间有什么区别?

给定以下用于在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

以下是我注意到的一些类似问题:

  1. 功能与括号和没有的区别
  2. 没有参数的Scala方法

jvm programming-languages functional-programming scala jvm-languages

53
推荐指数
3
解决办法
5981
查看次数

Scala中的函数与方法

我正在观看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

46
推荐指数
3
解决办法
2万
查看次数

没有参数的Scala方法

在Scala中,有两种方法可以定义一个不带参数的方法

    1 def a=println("hello")

    2 def a()=println("hello")
Run Code Online (Sandbox Code Playgroud)

这两种方法完全相同,但(2)可以使用和不使用括号来调用.

在Scala中是否有任何特殊原因允许使用此功能.它会让我感到困惑,何时使用?

methods scala parentheses

18
推荐指数
3
解决办法
9911
查看次数