bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Рекурсивное каррирование?

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

const curring = (sum = 0, ...args) => {
  sum += args.reduce((a,b) => a+b, 0)
  curring.valueOf = () => sum
  return curring.bind(null, sum)
}

console.log(curring(1))
console.log(curring(1,2,5))
console.log(curring(1)(2,5))
console.log(curring(1)(2)(5,5)(5))

// 18
// 18
// 18
// 18
  • Вопрос задан
  • 584 просмотра
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Вся проблема в том, что Вы на каждый вызов переопределяете метод valueOf у оригинальной функции, правильнее возвращать каждый раз новую функцию:
const curring = (...initArgs) => {
  let sum = 0;
  const curried = (...args) => {
    sum = args.reduce((a, b) => a + b, sum);
    return curried;
  };
  curried.valueOf = () => sum;
  return curried(...initArgs);
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы