scala: 'def foo = {1}' против 'def foo {1}'

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

scala> def foo = {1}
foo: Int

scala> foo
res2: Int = 1

Но:

scala> def foo {1}
foo: Unit

scala> foo

scala>

2 ответа

Решение

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

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

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

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

//[bad!] 
def f(x: Int) { x*x } //hidden error: without = it's a Unit-returning proc; causes havoc 
Другие вопросы по тегам