次のような関数があります。
function curry(fn) {
var args = [].slice.call(arguments, 1);
return function() {
return fn.call(this, args.concat([].slice.call(arguments)));
};
}
私はいつも、それが関数がどのように見えるべきか、次のように機能するべきだと思っていました:
function add(a, b, c, d) {
return a+b+c+d;
}
curry(add, 1, 2)(3, 4);
しかし、ウィキペディアの記事は次のように述べています
それぞれが単一の引数を持つ一連の関数として呼び出すことができます
したがって、カレーは次のようになります。
function curry(fn) {
var args = [];
return function curring() {
args = args.concat([].slice.call(arguments));
if (args.length >= fn.length) {
return fn.apply(this, args);
} else {
return curring;
}
};
}
次のように使用できます。
function add(a, b, c, d) {
return a+b+c+d;
}
curry(add)(1)(2)(3)(4);
私は正しいですか?