功能与括号和没有的区别

Jus*_*s12 33 scala

可能重复:
Scala中的函数与方法Scala中
def foo = {}和def foo()= {}之间的区别是什么?

在scala我们可以定义

def foo():Unit = println ("hello")
Run Code Online (Sandbox Code Playgroud)

要么

def foo:Unit = println ("hello")
Run Code Online (Sandbox Code Playgroud)

我知道它们不一样但有什么区别,哪些应该在什么时候使用?

如果之前已经回答过,请指出我的链接.

Eug*_*ota 44

可以使用括号或不使用括号来定义0-arity的Scala方法().这用于向用户发出信号,告知该方法具有某种副作用(如打印输出或销毁数据),而不是没有副作用的方法,以后可以实现val.

请参阅Scala编程:

这种无参数的方法在Scala中很常见.相比之下,使用空括号定义的方法(例如def height():Int)称为empty-paren方法.建议的约定是在没有参数时使用无参数方法,并且该方法仅通过读取包含对象的字段来访问可变状态(特别是,它不会改变可变状态).

该公约支持统一访问原则[...]

总而言之,鼓励Scala中的样式定义不带参数且没有副作用的方法作为无参数方法,即省略空括号.另一方面,您永远不应该定义一个没有括号的副作用的方法,因为那个方法的调用看起来像一个字段选择.

  • @ Jus12将是另一个问题,你可以挖掘或看到维基百科 - http://en.wikipedia.org/wiki/Side_effect_(computer_science) (2认同)