Список нескольких параметров, например. def foo(a:Int)(b:Int) = {}
и несколько параметров в списке, например. def foo(a:Int, b:Int) = {}
являются семантически эквивалентными, насколько я могу судить, и большинство функциональных языков имеют только один способ объявления нескольких параметров, например. F #.
Единственная причина, по которой я могу рассчитывать на поддержку обоих этих стилей определений функций, - это позволить синтаксические языковые расширения, используя список параметров, в котором есть только один параметр.
def withBufferedWriter(file: File)(block: BufferedWriter => Unit)
теперь можно вызвать с помощью синтаксиса
withBufferedWriter(new File("myfile.txt")) { out =>
out write "whatever"
...
}
Однако могут быть и другие способы поддержки использования фигурных скобок без наличия нескольких списков параметров.
Связанный вопрос: почему использование нескольких списков параметров в Scala называется "currying"? Каррирование обычно определяется как метод, позволяющий сделать n-арную функцию унарной для поддержки частичного применения. Однако в Scala можно частично применить функцию, не создавая версию функции "curried" (несколько списков параметров с одним параметром).