Ответ 1
В вашей функции curry отсутствует return
.
т.е.
return function () {
return fn.apply(null, args.concat(slice.apply(arguments)));
};
Это похоже на работу:)
Я реализовал функцию 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
. Разве это не ожидаемый результат? Что не так с моим кодом?
Примечание. Использование console.log(x, y)
внутри журналов функций add
1 10
. Я не понимаю, почему он возвращает undefined
.
В вашей функции curry отсутствует return
.
т.е.
return function () {
return fn.apply(null, args.concat(slice.apply(arguments)));
};
Это похоже на работу:)
Это пример функции карри:
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);
}
Эта функция curry создает карри-версию любой функции. Вы можете частично применить параметры к новой функции. Для каждого частичного приложения он возвращает функцию, которая принимает остальные параметры. Когда все параметры исходной функции будут применены, она вернет значение.