我应该使用Unit还是省略scala方法的返回类型?

时间:2012-02-27 08:17:42

标签: scala void return-type

我不确定将Unit指定为我的scala方法的返回类型或完全省略返回类型之间的区别。有什么区别?

有人可以提供建议吗?

3 个答案:

答案 0 :(得分:53)

隐式Unit返回类型:

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

显式Unit返回类型:

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

从上一个方法表达式推断的返回类型仍为Unit,因为这是println的类型,但令人困惑:

def h() = println("ABC")

上述所有方法都是等效的。我更喜欢f(),因为仅在方法签名后缺少=运算符对我来说已经足够了。如果要额外记录方法,请使用显式: Unit。最后一种形式令人困惑,实际上被视为中的警告。

=运营商至关重要。如果它存在,则表示:“请返回方法体中最后一个语句返回的”。显然,您不能将此语法用于abstract方法。如果不是,则假设为Unit

答案 1 :(得分:14)

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

def foo(): Unit = someCodeReturningUnit()

private def bar() = someCodeReturningUnit()

答案 2 :(得分:6)

Scala社区对此有所分歧。一方面,不使用显式返回类型意味着您可以轻松忘记=符号,这会导致通常很难跟踪的错误。另一方面,Unit - 返回具有不同语法的方法将它们放在一个单独的类别中,这让一些人高兴。

就个人而言,我宁愿这种语法会消失 - 由于缺少= 而导致的错误令人讨厌。但它甚至都没有被弃用,所以我宁愿利用它而不仅仅是遇到它存在的问题。

所以,使用你想要的任何东西。无论是哪种方式,都会有人批评你的选择,而且人们都会赞美它。

相关问题