, co dzieje się w każdym z tych form definiowania foo ?:scala: 'def foo = {1}' vs 'def foo {1}'
scala> def foo = {1}
foo: Int
scala> foo
res2: Int = 1
Ale:
scala> def foo {1}
foo: Unit
scala> foo
scala>
, co dzieje się w każdym z tych form definiowania foo ?:scala: 'def foo = {1}' vs 'def foo {1}'
scala> def foo = {1}
foo: Int
scala> foo
res2: Int = 1
Ale:
scala> def foo {1}
foo: Unit
scala> foo
scala>
Zobacz także this question and answer na SO:
W Scali czy deklaracja metoda nie posiada znak równości przed jego ciała, kompilator wnioskuje, że typ wynik będzie
Unit
Zasadniczo deklarowania funkcji bez =
oznacza, że powroty funkcyjnych Unit
i kompilator wstawia na koniec ()
. Funkcja, która powinna zwracać wartość inną niż Unit
musi być zadeklarowana jako z notacją =
(chociaż oczywiście kompilator może wywnioskować typ zwracany z typu wyrażenia).
Znalazłem to w http://anyall.org/scalacheat/:
//[bad!]
def f(x: Int) { x*x } //hidden error: without = it's a Unit-returning proc; causes havoc
Powiązane: http://stackoverflow.com/questions/944111/when-to-use-the-equals-sign-in-a-scala-method-declaration –