В настоящее время я изучаю 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) 
3
Codex0607 28 Окт 2019 в 14:49

2 ответа

Лучший ответ

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

    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 возвращает функцию like add1 и add5 за исключением это не жестко, чтобы быть +1 или +5; это + все, что вы передавали, когда звонили addN.

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

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

3
Anthony 28 Окт 2019 в 12:11

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

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

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

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

0
sibabrat swain 28 Окт 2019 в 12:17
58590416