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