2016-11-01 2 views
2

Gibt es eine Möglichkeit, beim Schreiben einer Curry-Funktion einen internen Status beizubehalten?Status in Curry-Funktion beibehalten

Zum Beispiel möchte ich eine Curry-Funktion schreiben, die berücksichtigt, wie oft die Funktion zuvor aufgerufen wurde.

I.e. addProgressiv (3) (4) (5) = 1 * 3 + 2 * 4 + 3 * 5 = 26.

Mein Ansatz ist es, einen Zähler hinzuzufügen, der jedes Mal erhöht, wenn eine neue Curry-Funktion zurückgegeben wird, aber ich kann ' Ich finde einen guten Weg, dieses Argument innerhalb der Funktion addProgressiv zu verfolgen.

+0

Bitte beachten Sie, dass currying kommt aus der funktionalen Programmierung und die funktionale Paradigma versucht Zustand zu vermeiden, weil sie Nebenwirkungen verursachen können. – ftor

Antwort

5

Sie könnten eine andere Variable als Abschluss für den Faktor verwenden.

function addProgressively(x) { 
 
    var factor = 1, 
 
     sum = factor * x; 
 

 
    function f(y) { 
 
     factor++; 
 
     sum += factor * y; 
 
     return f; 
 
    }; 
 
    f.toString = function() { return sum; }; 
 
    return f; 
 
} 
 

 
console.log(addProgressively(3)(4)(5));

Verwandte Themen