Inkrementelles Summieren von Werten mit einer variadischen Curry-Funktion
Können wir eine JavaScript-Funktionssumme erstellen, die sich wie folgt verhält?
sum(1)(2) = 3 sum(1)(2)(3) = 6 sum(1)(2)(3)(4) = 10
Kurz gesagt, die Funktion sollte es uns ermöglichen, durch wiederholte Eingabe zusätzlicher Summen eine Summe zu akkumulieren Werte.
Zunächst wurde uns gesagt, dass eine solche Funktion in JavaScript unmöglich sei. Es entstand jedoch ein alternativer Ansatz: Hinzufügen eines Vorzeichens vor der Summenfunktion.
+sum(1)(2)(3)(4)
Wenn das Vorzeichen in Verbindung mit einer Funktion verwendet wird, wandelt es den Rückgabewert der Funktion in eine Zahl um. In diesem Fall gibt die Funktion sum also tatsächlich Zahlen zurück, die dann bei jedem weiteren Aufruf erhöht werden.
Um das gewünschte Verhalten zu erreichen, können wir in unserer Summenfunktion eine Currying-Technik anwenden. So sieht die Implementierung aus:
function sum(n) { var v = function(x) { return sum(n + x); }; v.valueOf = v.toString = function() { return n; }; return v; } console.log(+sum(1)(2)(3)(4)); // Output: 10
Diese Implementierung verpackt die Summenfunktion in der v-Variablen, die dann zurückgegeben wird. Mit der v-Funktion können wir der n-Variablen schrittweise Werte hinzufügen. Indem wir v mithilfe des Operators auf eine Zahl umwandeln, können wir die kumulierte Summe erhalten.
Im Beispiel gibt die Anweisung console.log 10 aus, was der Summe von 1, 2, 3 und 4 entspricht.
Das obige ist der detaillierte Inhalt vonWie kann eine Curry-JavaScript-Funktion Werte inkrementell summieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!