Bene, ora stai facendo due diverse domande.
What's the benefit returning a function compared to a value?
Functions can do things. Values just sit there being things. Unless of course the value is a function.
Con l'elenco 1 puoi dire sortBy(0)(x, y)
con l'elenco 2 devi dire sortBy(0, x, y)
Le cose si divertono con l'elenco 1 quando dici s = sortBy(0)
perché ora puoi dire s(x,y)
o s(y,z)
. Viene ricordato lo 0, quindi non devi passarlo quando chiami s
. Ciò significa che è possibile conoscere questi valori in momenti diversi. Non devi spingerli tutti in una volta.
Ciò che hai ottenuto nella lista 1 è una piccola cosa chiamata chiusura . È quasi la stessa cosa di un oggetto. La prima chiamata si comporta come un costruttore. Il secondo è la chiamata è come una chiamata al metodo. La differenza è che le chiusure hanno solo un metodo. Quindi non devi sapere il suo nome. Dagli un nome e butta un altro () dopo di esso.
Naturalmente le persone funzionali odiano sentirli chiamare metodi. Non è un metodo è una chiusura che "ha accesso al suo ambito lessicale che racchiude". Feh, è un modo elegante per dire che i vars al di fuori della funzione interna allo stesso modo in cui un metodo ha accesso ai membri vars dei membri. In questo caso è il p
che è stato passato.
A differenza degli oggetti, puoi decidere quale metodo viene chiamato, scusa, chiudi.