функция составления добавления нового параметра - PullRequest
3 голосов
/ 28 октября 2019

В настоящее время я изучаю JavaScript и застрял, добавив в свою функцию параметр, который должен добавить два числа. Я не новичок в программировании. Многое сделал в Java и C #, но Javascript сводит меня с ума из-за контекста, композиции и каррирования ... Итак, вот моя проблема:

const compose = (f, g) => (a) => f(g(a));
const add1 = (num) => num + 1;
const add5 = (num) => num + 5;
compose(add1, add5)(10)          // 16

Приведенный выше код работает! Но я хочу, чтобы числа +1 и +5 были переменными, чтобы у меня было вот так:

// Something linke this 
const compose = (f, g) => (a,b) => f(g(a,b));
const add1 = (num, num2) => num + num2;
const add5 = (num, num2) => num + num2;
compose(add1, add5)(10, 4)   // Those numbers should be the Parameter input for add1 and add5 (num, num2) 

Ответы [ 2 ]

3 голосов
/ 28 октября 2019

Может быть так:

    const addN = (n) => num => num + n
    const compose = (f,g) => a => f(g(a));
    const result = compose(addN(10),addN(4))(1);
    console.log(result);

addN создает функции сумматора, в данном случае add10 и add4. Вместо того, чтобы возвращать значение, как ваши исходные add1 и add5, addN возвращает функцию , такую ​​как add1 и add5, за исключением того, что она не жестко закодирована, чтобы быть +1 или +5;это + все, что вы передали, когда вызывали addN.

console.log(addN(6)(10)); //16

addN(6) создает функцию "add6", а затем мы вызываем эту функцию "add6" с 10, чтобы получить результат 16

0 голосов
/ 28 октября 2019

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

// add = a => b => Number
const add = a => b => a + b;

const result = add(2)(3); // => 5

Сначала функция принимает a, а затем возвращает новую функцию, которая затемпринимает б возвращает сумму а и б. Каждый аргумент берется по одному за раз. Если функция имеет больше параметров, она может просто продолжать возвращать новые функции, пока все аргументы не будут предоставлены и приложение не будет завершено.

...