如题调用f(3,3)或者f(3)(3)的值都等于6,各位有什么好的算法没?
f = (function(){
let value = 0
function ret () {
for (let k in arguments) {
value += arguments[k]
}
return ret
}
ret.toString = function(){
return value
}
return ret
})()
如果只支持固定两个参数的话,还是比较简单的:
function f(a,b){
if(b){
return a+b;
}else{
return function(b){
return a+b;
}
}
}
使用 lodash 或者 ramda 库:
import _ from 'lodash'
const f = (a,b)=>(a+b)
const curryF = _.curry(f);
console.log(curryF(3)(3))
如果自己实现,大概张这样:
function curry(fx) {
var arity = fx.length;
return function f1() {
var args = Array.prototype.slice.call(arguments, 0);
if (args.length >= arity) {
return fx.apply(null, args);
}
else {
var f2 = function f2() {
var args2 = Array.prototype.slice.call(arguments, 0);
return f1.apply(null, args.concat(args2));
}
f2.toString = function() {
return inspectFn(fx) + inspectArgs(args);
}
return f2;
}
};
}
13 回答12.6k 阅读
7 回答1.6k 阅读
3 回答1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
2 回答1.8k 阅读
2 回答1k 阅读✓ 已解决
这已经是日经问题了…………
在SF已经问过好多遍的了,关键字:
柯里化