可能重复:
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")
我知道它们不一样但有什么区别,哪些应该在什么时候使用?
如果之前已经回答过,请指出我的链接。
答案 0 :(得分:43)
可以使用或不使用括号()
来定义0-arity的Scala方法。这用于通知用户该方法具有某种副作用(如打印出std out或销毁数据),而不是没有的那种,后来可以实现为val
。
这种无参数的方法在Scala中很常见。相比之下,使用空括号定义的方法(例如def height():Int)称为empty-paren方法。建议的约定是在没有参数时使用无参数方法,并且该方法仅通过读取包含对象的字段来访问可变状态(特别是,它不会改变可变状态)。
该惯例支持统一访问原则[...]
总而言之,鼓励Scala中的样式定义不带参数且没有副作用的方法作为无参数方法,即省略空括号。另一方面,您永远不应该定义一个没有括号的副作用的方法,因为那个方法的调用看起来像一个字段选择。