【问题标题】:scala - def with and without = [duplicate]scala - def 有和没有= [重复]
【发布时间】:2013-02-15 08:03:36
【问题描述】:

下面这两个有区别吗..

scala> def foo() = {}
foo: ()Unit

scala> def foo() {}
foo: ()Unit

它们似乎是一样的。
两者都支持有什么原因吗?

【问题讨论】:

标签: scala function


【解决方案1】:
def foo() {}

等同于(并强制执行)

def foo(): Unit = {}

同时

def foo() = {}

将应用类型推断来从方法体中确定结果类型。

因此,对于前两个选项,Unit 是唯一允许的返回类型,而在第三个选项中,返回类型取决于实现。

【讨论】:

  • 啊,很棒的解释。我不知道可以推断出返回类型,谢谢 Mef!
  • 这是 Scala 语言的许多令人敬畏的东西之一 :-) 值得注意的是,对于方法/函数,至少是那些公共 API 的,返回类型仍然应该显示得很好致您的代码/API 的读者。
  • @SeanConnolly:确实,在大多数情况下,编译器可以推断出返回类型(如果直接递归则不能)。但依赖它通常不是一个好主意。方法不依赖类型推断有两个原因:1)显式结果类型具有文档价值; 2) 推断类型可能比您喜欢的更窄或更复杂。 (2) 的一个示例是返回 HashMap。你可能不希望你的 API 契约指定这样一个特定的类型并且没有明确的返回类型注释,你将被绑定到那个具体的类型,以免你做出重大的改变。
  • 好点@RandallSchulz,干杯!
猜你喜欢
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
相关资源
最近更新 更多