我应该使用单位还是省略了我的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,人们赞美它。