#javascript #function #currying #curry
Вопрос:
у меня было много проблем с пониманием того, как на самом деле работает эта функция каррирования и что именно она делает?
Function.prototype.curry = function() {
var fn = this, args = Array.prototype.slice.call(arguments);
return function() {
return fn.apply(this, args.concat(
Array.prototype.slice.call(arguments)));
};
};
потому что я знаком только с этим типом функции каррирования:
function curry(f) {
return function(a) {
return function(b) {
return f(a, b);
};
}
Комментарии:
1. Ну, это не работает. На самом деле она выполняет частичное применение, а не каррирование .
2. Более современная версия первого фрагмента (и с использованием функции вместо метода) будет
(f, ...pargs) => (...args) => f(...pargs, ...args)
, тогда как вашаcurry = (f) => (a) => (b) => f(a, b)
3. @ceving Да, мне неясно, какая конкретная проблема OP должна понимать функцию, и сколько деталей они ожидают от объяснения » что именно он делает «. Вот почему я не могу ответить, а только предоставить полезные (возможно, проницательные) комментарии.
4. @Bergi Я думаю, что комментарий к ответу — хорошее место, чтобы указать это.