我应该使用单位还是省略了我的Scala方法的返回types?

我不知道指定单元作为我的Scala方法的返回types或完全舍弃返回types之间的区别是什么。 有什么不同?

任何人都可以请指教?

隐式Unit返回types:

 def f() {println("ABC")} 

显式Unit返回types:

 def g(): Unit = {println("ABC")} 

从上一个方法expression式推断出的返回types,仍然是Unit因为这是println的types,但令人困惑:

 def h() = println("ABC") 

以上所有方法都是等价的。 我更喜欢f()因为在方法签名之后缺less=运算符就足够了。 使用显式: Unit当你想额外的文件的方法。 最后一种forms很混乱,实际上在intellij-idea中被当作​​警告。

=运算符是至关重要的。 如果存在,则意味着:方法体中的“ 请返回最后一条语句返回的内容 ”。 显然,你不能在abstract方法中使用这个语法。 如果不是,则假设Unit

程序的特殊语法(返回Unit的方法)是一个错误。 不要使用它。 对于具有Java / C(++)背景的初学者来说,这是令人困惑和危险的。 这是一个不必要的特殊待遇。 总是使用等号,有和没有types推断(后者只能用于私人成员):

 def foo(): Unit = someCodeReturningUnit() private def bar() = someCodeReturningUnit() 

斯卡拉社区分裂它。 一方面,不使用明确的返回types意味着你可以很容易地忘记=号,从而导致往往令人讨厌的错误。 另一方面,具有不同语法的Unit返回方法将它们放在单独的类别中,这使得一些人感到高兴。

就个人而言,我宁愿这种语法会消失 – 由于缺less=导致的错误令人讨厌。 但是它并没有被废弃,所以我宁愿利用它,而不仅仅是承受它存在的问题。

所以,使用任何你想要的。 有人会批评你的select,人们赞美它。