2016-11-01 12 views
2

Есть ли способ сохранить какое-то внутреннее состояние при написании функции карри?Сохранение состояния в кардиальной функции

Например, предположим, что я хочу написать функцию в карри, которая учитывает количество раз, когда функция была вызвана ранее.

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

Мой подход заключается в добавлении некоторого счетчика, который увеличивается каждый раз, когда возвращается новая функция в карри, но я могу " t найти хороший способ отслеживать этот аргумент в функции addProgressively.

+0

Пожалуйста, обратите внимание, что каррирование приходит из функционального программирования и функциональная парадигма пытается избежать состояния, потому что это может вызвать побочные эффекты. – ftor

ответ

5

Вы можете использовать другую переменную в качестве замыкания для коэффициента.

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));

 Смежные вопросы

  • Нет связанных вопросов^_^