scala-带和不带的def=
以下两种方法有区别吗scala-带和不带的def=,scala,function,Scala,Function,以下两种方法有区别吗 scala> def foo() = {} foo: ()Unit scala> def foo() {} foo: ()Unit 他们似乎是一样的。 这两者都得到支持有什么原因吗 def foo() {} 等同于并强制执行 def foo(): Unit = {} 当 将应用类型推断从方法体确定结果类型 因此,对于前两个选项,Unit是唯一允许的返回类型,而在第三个选项中,返回类型取决于实现 等同于并强制执行 def foo(): Unit = {}
scala> def foo() = {}
foo: ()Unit
scala> def foo() {}
foo: ()Unit
他们似乎是一样的。
这两者都得到支持有什么原因吗
def foo() {}
等同于并强制执行
def foo(): Unit = {}
当
将应用类型推断从方法体确定结果类型
因此,对于前两个选项,Unit是唯一允许的返回类型,而在第三个选项中,返回类型取决于实现
等同于并强制执行
def foo(): Unit = {}
当
将应用类型推断从方法体确定结果类型
因此,对于前两个选项,Unit是唯一允许的返回类型,而在第三个选项中,返回类型取决于实现。Related:后一种形式只能用于定义返回Unit的函数。第一种形式用于所有其他函数。相关:相关:后一种形式只能用于定义返回单元的函数。第一个用于所有其他函数。相关:啊,精彩的解释。我不知道可以推断返回类型,谢谢!这是Scala语言的许多令人敬畏的东西之一:-值得注意的是,对于方法/函数,至少对于公共API的方法/函数,返回类型仍然应该显示出来,以便对代码/API的读者友好。@SeanConolly:的确,在大多数情况下,如果返回类型是直接递归的,则编译器无法推断返回类型。但依赖它往往不是一个好主意。方法不依赖类型推断有两个原因:1显式结果类型具有文档值;2推断类型可能比您喜欢的更窄或更复杂。2的一个示例是返回HashMap。您可能不希望您的API契约指定这样一个特定的类型,并且没有显式的返回类型注释,您将被绑定到该具体类型,以免做出破坏性的更改。好的观点@RandallSchulz,干杯!啊,太棒了。我不知道可以推断返回类型,谢谢!这是Scala语言的许多令人敬畏的东西之一:-值得注意的是,对于方法/函数,至少对于公共API的方法/函数,返回类型仍然应该显示出来,以便对代码/API的读者友好。@SeanConolly:的确,在大多数情况下,如果返回类型是直接递归的,则编译器无法推断返回类型。但依赖它往往不是一个好主意。方法不依赖类型推断有两个原因:1显式结果类型具有文档值;2推断类型可能比您喜欢的更窄或更复杂。2的一个示例是返回HashMap。您可能不希望您的API契约指定这样一个特定的类型,并且没有显式的返回类型注释,您将被绑定到该具体类型,以免做出破坏性的更改。好的观点@RandallSchulz,干杯!