Wiele list parametrów, np. def foo(a:Int)(b:Int) = {}
i wiele parametrów na liście, np. def foo(a:Int, b:Int) = {}
są semantycznie równoważne, o ile mogę powiedzieć, a większość języków funkcjonalnych ma tylko jeden sposób deklarowania wielu parametrów, np. FA#.Dlaczego Scala udostępnia zarówno listę wielu parametrów, jak i wiele parametrów na liście?
Jedynym powodem, dla którego mogę wymyślić obsługę obu tych stylów definicji funkcji, jest umożliwienie rozszerzenia języka podobnego do składni przy użyciu listy parametrów, która zawiera tylko jeden parametr.
def withBufferedWriter(file: File)(block: BufferedWriter => Unit)
można teraz nazywa się składnia wyglądające
withBufferedWriter(new File("myfile.txt")) { out =>
out write "whatever"
...
}
Jednak mogą istnieć inne sposoby wspierania użycia nawiasów klamrowych, bez konieczności wiele list parametrów.
Pokrewne pytanie: dlaczego w Scali używa się wielu list parametrów, zwanych "currying"? Currying jest zwykle definiowany jako technika, która sprawia, że funkcja n-ary staje się unarna ze względu na poparcie częściowego zastosowania. Jednak w Scali można częściowo zastosować funkcję bez tworzenia "curry" (lista wielu parametrów z jedną wersją) w funkcji.
ogólnie: to po prostu bardziej matematycznie wyraziste.Dlaczego wystarczy z jedną listą, kiedy można uogólniać do wielu :) – matanster