Как я могу получить доступ к результату предыдущей функции в функции карри? - PullRequest
1 голос
/ 06 мая 2019

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

С чем я борюсь: как я могу получить доступ к первой функции и значению в конце одновременно?

Пока что я могу получить доступ к первой функции, написав функцию в синтаксисе функции и получив доступ к this.

Function.prototype.foo = function(x) {
  // can't make currying functions by using functions keyword
  console.log(this, x);
};

(() => 10).foo(1);

Когда я пишу функцию карри, я могу получить доступ ко второй (x) и третьей (y) функциям.

Function.prototype.bar = x => y => {
  // but also can't access this like in function syntax
  console.log(x, y);
}

// how would I access 10 in bar?
(() => 10).bar(1)(2);

Последняя функция будет выглядеть примерно так:

someFunc.then(someSecondFunc).then(someThirdFunc)(100)

Большое спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Не уверен, решит ли это вашу проблему, но вы можете создавать функции каррирования с помощью ключевого слова function:

Function.prototype.bar = function(x) {
    return function(y) {
        console.log(x, y)
    }
}

Я не смог проверить, действительно ли это работает:

(function() {return 10}).bar(1)(2)

В любом случае ˋthisˋ будет функцией, а не возвращаемым значением (10), так как функция не вызывается.

0 голосов
/ 07 мая 2019

Используя функции каррирования и ключевое слово function, мой ответ выглядит следующим образом:

Function.prototype.then = function(secondFct) {
  const firstFct = this;
  return function(value) {
    return firstFct(secondFct(value));
  }
}

Большое спасибо buboh за помощь.

...