多个参数列表,例如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”(多个参数列表,每个参数列表,每个参数列表)版本。