功能与括号和没有的区别

时间:2011-09-29 17:13:14

标签: scala

  

可能重复:
  Functions vs methods in Scala
  What is the difference between def foo = {} and def foo() = {} in Scala?

在scala中我们可以定义

def foo():Unit = println ("hello")

def foo:Unit = println ("hello")

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

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

1 个答案:

答案 0 :(得分:43)

可以使用或不使用括号()来定义0-arity的Scala方法。这用于通知用户该方法具有某种副作用(如打印出std out或销毁数据),而不是没有的那种,后来可以实现为val

请参阅Programming in Scala

  

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

     

该惯例支持统一访问原则[...]

     

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