Каррирование

Каррирование заменяет адаптер

pow(i, j); 

function square(i) { 
    return pow(i, 2); 
}
function mul(a, b) {
  return a * b;
};

var double = mul.bind(null, 2); // контекст фиксируем null, он не используется

Говорят, что double является «частичной функцией» (partial function) от mul

Еще пример

var greet = function(greeting, name) {
  console.log(greeting + ", " + name);
};
greet("Hello", "Heidi"); //"Hello, Heidi"
var greetCurried = function(greeting) {
  return function(name) {
    console.log(greeting + ", " + name);
  };
};
var greetHello = greetCurried("Hello");
greetHello("Heidi"); //"Hello, Heidi"
greetHello("Eddie"); //"Hello, Eddie"

В общем виде функция каррирования выглядит вот так

function curry(func, a) {
    return function (b) {
        return func(b,a);
    };
}

Практика:

  1. Получить из функции pow, функцию 2^n
  2. Получить из функции, которая рисует прямоугольник, функцию, которая рисует квадрат.
  3. Есть функция func(a,b) - сделать функцию x, которую можно вызывать x(a)(b), но ее действие было бы аналогичным

results matching ""

    No results matching ""