JavaScript карри - PullRequest
       2

JavaScript карри

13 голосов
/ 09 декабря 2010

Я реализовал функцию curry следующим образом:

function curry (fn) {
    var slice = Array.prototype.slice,
        args = slice.apply(arguments, [1]);
    return function () {
        fn.apply(null, args.concat(slice.apply(arguments)));
    };
}

Когда я использую вышеупомянутую функцию для выполнения следующих действий

function add (x, y) {
    return x + y;
}

var inc = curry(add, 1);
console.log(inc(10));

, она регистрирует undefined.Разве 11 не ожидаемый результат?Что не так с моим кодом?

Примечание. Использование console.log(x, y) внутри функции add регистрирует 1 10.Я не понимаю, почему он возвращает undefined.

Ответы [ 2 ]

13 голосов
/ 09 декабря 2010

Вам не хватает return в вашей функции карри.

* 1004 Т.е. *

return function () {
    return fn.apply(null, args.concat(slice.apply(arguments)));
};

Это, кажется, работает :) 1007 *

11 голосов
/ 26 декабря 2012

Это пример функции карри:

function curry(func) {
    var initial_args = [].slice.apply(arguments, [1]);
    var func_args_length = func.length;

    function curried(args) {
        if (args.length >= func_args_length) {
            return func.apply(null, args);
        }

        return function () {
            return curried(args.concat([].slice.apply(arguments)));
        };
    }

    return curried(initial_args);
}

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

...