Разница между этими двумя определениями определенно есть.Рассмотрите возможность передачи каждого отдельного аргумента.
add1(1)
(Int) => Int = <function1>
add2(1)
<console>:9: error: missing arguments for method add2 in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
add2(1)
Однако, если вы частично примените add2, он будет того же типа, что и add1.
scala> :t add1
(Int) => (Int) => Int
scala> :t add2 _
(Int) => (Int) => Int
Я прекрасно понимаю, что add1.Это анонимная функция, которая принимает Int и возвращает Int => Int.Это классическое определение функции с карри.
Мне нужно больше читать, прежде чем я начну понимать add2.Насколько я могу судить, это метод написания функций, которые принимают свои параметры в другой форме (например, add2(1)(2)
) и могут быть легко преобразованы в карри (add2 _
).
Надеюсь, этопомогает!Я также с нетерпением жду лучшего объяснения о add2
.
Редактировать: это отличный документ о методах карри в scala: http://www.codecommit.com/blog/scala/function-currying-in-scala