Подтвердить что ты не робот

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

что происходит в каждой из этих форм определения foo?:

scala> def foo = {1}
foo: Int

scala> foo
res2: Int = 1

Но:

scala> def foo {1}
foo: Unit

scala> foo

scala>
4b9b3361

Ответ 1

См. также этот вопрос и ответ на SO:

В Scala, если объявление метода не имеет знака равенства перед его телом, компилятор сообщает, что тип результата будет Unit

В принципе объявление функции без = означает, что функция возвращает Unit, а компилятор вставляет () для вас в конце. Функция, которая должна вернуть значение << → должна быть объявлена ​​с помощью нотации = (хотя, конечно, компилятор может вывести тип возвращаемого значения из типа выражения).

Ответ 2

нашел это в http://anyall.org/scalacheat/:

//[bad!] 
def f(x: Int) { x*x } //hidden error: without = it a Unit-returning proc; causes havoc