Mehrere Parameterlisten, z.B. def foo(a:Int)(b:Int) = {}
und mehrere Parameter pro Liste, z.B. def foo(a:Int, b:Int) = {}
sind semantisch gleichwertig, soweit ich das beurteilen kann, und die meisten funktionalen Sprachen haben nur eine Möglichkeit, mehrere Parameter zu deklarieren, z. F #.Warum bietet Scala sowohl mehrere Parameterlisten als auch mehrere Parameter pro Liste?
Der einzige Grund, warum ich beide Stile von Funktionsdefinitionen unterstützen kann, ist syntaxähnliche Spracherweiterungen mit einer Parameterliste, die nur einen Parameter enthält.
def withBufferedWriter(file: File)(block: BufferedWriter => Unit)
kann nun mit der Syntax-Suche
withBufferedWriter(new File("myfile.txt")) { out =>
out write "whatever"
...
}
jedoch genannt werden, könnte es andere Möglichkeiten, die Verwendung von geschweiften Klammern unterstützen, ohne dass mehrere Parameterlisten zu haben.
Eine verwandte Frage: Warum wird die Verwendung von mehreren Parameterlisten in Scala "currying" genannt? Gewöhnlich wird Currying als eine Technik definiert, um eine n-ary-Funktion zum Unterstützen einer teilweisen Anwendung unförmig zu machen. In Scala kann man jedoch teilweise eine Funktion anwenden, ohne eine "curried" Version (mehrere Parameterlisten mit jeweils einem Parameter) der Funktion zu erstellen.
Allgemein gilt: es ist einfach mathematisch ausdrucksstark.Warum reicht es mit einer Liste, wenn Sie auf eine Mehrzahl verallgemeinern können? – matanster