这些定义foo的每种形式发生了什么?:
scala> def foo = {1}
foo: Int
scala> foo
res2: Int = 1
可是:
scala> def foo {1}
foo: Unit
scala> foo
scala>
答案 0 :(得分:16)
另请参阅SO上的this question and answer:
在Scala中,如果方法声明在其主体之前没有等号,则编译器会推断结果类型为
Unit
基本上声明一个没有=
的函数意味着该函数返回Unit
并且编译器在最后为您插入()
。应返回非Unit
值的函数必须以=
表示法声明(当然编译器可以从表达式的类型推断返回类型)。
答案 1 :(得分:2)
在http://anyall.org/scalacheat/中找到了这个:
//[bad!]
def f(x: Int) { x*x } //hidden error: without = it's a Unit-returning proc; causes havoc