Добавить несколько переменных, переданных в качестве параметра к функции каррирования

1

Как я могу достичь этих сценариев с помощью функции currying?

add(3,4)(3)
add(3)(4)(3)
add(3)(4,3)

Я прочитал так много блогов, что не смог найти такой сценарий. может кто-то мне помочь в этом.

Показать ещё 1 комментарий
Теги:
function
currying

2 ответа

1

Что-то вроде этого?

var total = 0;
function add(){
    // Add up every argument received
    for (var i in arguments)
        total += arguments[i];
        
    return add;
}

add(3,4)(3);
console.log(total);

add(3)(4)(3);
console.log(total);

add(3)(4,3);
console.log(total);

Обновить

Если вы не хотите, чтобы функция зависела от глобальной переменной, сохраните значение как атрибут функции add вместо

function add(){
    // Add up every argument received
    for (var i in arguments)
        add.total += arguments[i];
        
    return add;
}

add.total = 0;
add.toString = function(){
  var total = add.total;
  
  add.total = 0;
  
  return total;
};

var sum1 = add(3,4)(3);
alert( sum1 );

var sum2 = add(3)(4)(3);
alert( sum2 );

var sum3 = add(3)(4,3);
alert( sum3 );
  • 0
    Спасибо @Thum Choon Tat например
  • 0
    Это не очень хорошее решение, поскольку оно зависит от глобального состояния.
Показать ещё 1 комментарий
0

Здесь я вижу два сценария:

1.

add(3,4)(3)
add(3)(4,3)

а также

2.

add(3)(4)(3)

Первый, с которым вы можете обратиться:

function add() {
    const args1 = Array.prototype.slice.call(arguments);
    return function() {
        const args2 = Array.prototype.slice.call(arguments);
        return args1.concat(args2).reduce(function(a, i) { return a + i });
    }
}

Второй:

function add() {
    const args1 = Array.prototype.slice.call(arguments);
    return function() {
        const args2 = Array.prototype.slice.call(arguments);
        return function() {
            const args3 = Array.prototype.slice.call(arguments);
            return args1.concat(args2).concat(args3).reduce(function(a, i) { return a + i });
        }
    }
}

Я не нашел решения, чтобы иметь функцию, которая работает одновременно.

  • 0
    @ gil.fernandes : да, вы правильно прочитали статьи Феликса Клинга . Возможная копия Как я могу предварительно установить аргументы в вызове функции JavaScript? (Частичное применение функции) - Феликс Клинг вчера

Ещё вопросы

Сообщество Overcoder
Наверх
Меню