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

时间:2009-11-02 15:06:38

标签: scala methods

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

scala> def foo = {1}
foo: Int

scala> foo
res2: Int = 1

可是:

scala> def foo {1}
foo: Unit

scala> foo

scala>

2 个答案:

答案 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