scala: 'def foo = {1}' против 'def foo {1}' - PullRequest
12 голосов
/ 02 ноября 2009

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

scala> def foo = {1}
foo: Int

scala> foo
res2: Int = 1

Но:

scala> def foo {1}
foo: Unit

scala> foo

scala>

Ответы [ 2 ]

16 голосов
/ 02 ноября 2009

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

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

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

2 голосов
/ 02 ноября 2009

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

//[bad!] 
def f(x: Int) { x*x } //hidden error: without = it's a Unit-returning proc; causes havoc 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...