12

what is going on in each of these forms of defining foo?:

scala> def foo = {1}
foo: Int

scala> foo
res2: Int = 1

But:

scala> def foo {1}
foo: Unit

scala> foo

scala>
oxbow_lakes
  • 133,303
  • 56
  • 317
  • 449
IttayD
  • 28,271
  • 28
  • 124
  • 178

2 Answers2

16

See also this question and answer on SO:

In Scala if a method declaration does not have an equal sign before its body, the compiler infers that the result type will be Unit

Basically declaring a function with no = means that the function returns Unit and the compiler inserts a () for you at the end. A function which should return a non-Unit value must be declared with the = notation (although of course the compiler can infer the return-type from the expression's type).

Community
  • 1
  • 1
oxbow_lakes
  • 133,303
  • 56
  • 317
  • 449
2

found this in http://anyall.org/scalacheat/:

//[bad!] 
def f(x: Int) { x*x } //hidden error: without = it's a Unit-returning proc; causes havoc 
oxbow_lakes
  • 133,303
  • 56
  • 317
  • 449
IttayD
  • 28,271
  • 28
  • 124
  • 178