我们说我有3个阵列
var first = [0, 1, 2, 3];
var second = [0, 1, 2, 3];
var third = [0, 1, 2, 3];
我想做一个curried函数,我设置第一个参数,指示我想在作为参数传递的数组中添加哪个单元格...理想情况下,我希望该函数能够使用无限数量的数组。 ...
例如:
mycurriedfunction(1)
意味着我想访问我传入的数组的单元格1的值并将它们一起添加。
因此做:
mycurriedfunction(1)(first)
将返回1
mycurriedfunction(1)(first)(second)
会返回2
mycurriedfunction(2)(first)(second)(third)
将返回6
这甚至可能吗?
如果没有,那么有什么替代选择可以实现类似甚至相同的结果?
答案 0 :(得分:4)
不,一个值既不是数字也不是函数。
您应该将您的功能改为列表,或者将其表述为减速器。
答案 1 :(得分:4)
正如其他人所提到的,你所描述的功能无法知道是否要返回下一个要调用的函数或最终值。
如果你真的想要实现类似的接受无限数量的数组的东西,你可以稍微调整它以将累积的值存储为返回函数的属性。
$(document).ready(function(){
$.get("/portfolio/model", function(data){
console.log(data);
$('div .model').html(data);
});
这可以像您的示例一样使用,区别在于您需要在完成后将结果从function sumIdx(idx) {
function f(value) {
function g(arr) {
return f(value + arr[idx]);
}
g.value = value;
return g;
}
return f(0);
}
属性中拉出来。
value
虽然可能,但我可能不建议使用这种方法。也许使用单独的数据类型可以更好地表示这种行为(或者像Scott Sauyet建议const first = [0, 1, 2];
const second = [3, 4, 5];
const third = [6, 7, 8];
sumIdx(2)(first)(second)(third).value // 15
更改您的API)。
myFn(2, [first, second, third])
这里的不同之处在于您需要调用class SumIdx {
constructor(idx, value) {
this.idx = idx;
this.value = value;
}
next(arr) {
return new SumIdx(this.idx, this.value + arr[this.idx]);
}
}
const sumIdx = idx => new SumIdx(idx, 0);
方法而不是直接调用结果。
next