В чем разница между def f(x: Int)(y: Int) = x + y
и def f(x: Int) = (y: Int) => x + y
?В чем разница между несколькими списками аргументов и возвратом функции?
РЕПЛ не кажется счастливым, когда я лечу бывший так же, как последний:
scala> def f(x: Int)(y: Int) = x + y
f: (x: Int)(y: Int)Int
scala> f(42)
<console>:9: error: missing arguments for method f;
follow this method with `_' if you want to treat it as a partially applied function
f(42)
^
scala> def f(x: Int) = (y: Int) => x + y
f: (x: Int)Int => Int
scala> f(42)
res2: Int => Int = <function1>
Каковы точные различия и когда я должен использовать какую форму?
Ну, это функция с двумя аргументами, а одна возвращает функцию, которая принимает один аргумент. Нет? –
То, как мне нравится думать, это первый метод с двумя унарными архлистами, возвращающими 'Int' (поэтому результат' f (0) 'по-прежнему является методом' (y: Int) Int'), тогда как последний - это метод с одним унарным аргументом, возвращающим унарную функцию 'Int => Int'. Это объясняет, почему только первый жалуется на недостающее подчеркивание; 'f (0)' в этом случае не оценивает функцию. – Hugh