scala:'def foo = {1}'vs'def foo {1}'

Itt*_*ayD 12 methods scala

在这些定义foo的每种形式中发生了什么?:

scala> def foo = {1}
foo: Int

scala> foo
res2: Int = 1
Run Code Online (Sandbox Code Playgroud)

但:

scala> def foo {1}
foo: Unit

scala> foo

scala>
Run Code Online (Sandbox Code Playgroud)

oxb*_*kes 16

另见SO上的这个问题和答案:

在Scala中,如果方法声明在其主体之前没有等号,则编译器会推断结果类型将是 Unit

基本上声明一个函数并不=意味着函数返回Unit,编译器()最后会为你插入一个函数.其应返回的非甲函数Unit必须与声明=符号(尽管当然编译器可以推断回归式由表达式的类型).