编写一个柯里化的 JavaScript 函数,该函数可以被调用任意次数,并在最后一次函数调用时返回一个值

2023-11-21

我目前正在用我的个人时间解决一个编程问题,要求我制作一个可以以这种方式调用的 JavaScript 函数。

add(1) // 1
add(1)(2) // 3
add(1)(2)(3); // 6
add(1)(2)(3)(4); // 10
add(1)(2)(3)(4)(5); // 15

我无法弄清楚如何让它在最后一次调用时返回一个值。

例如,为了add(1)(2)去工作,然后add(1)必须返回一个函数,但是根据说明add(1)当它被调用时会返回1.

我假设你可以克服这个问题的一种方法是计算出连续多少次add正在调用函数,但我想不出一种方法来实现这一点。有谁有任何提示可以指出我正确的方向吗?

我读过这两篇文章(1, 2)关于函数柯里化,我理解它们,但我不确定在处理可变数量的参数时如何进行柯里化。


不可能用未知数量的参数来柯里化可变参数函数。

Where add是一个可变参数函数,你可以做类似的事情

var add5 = curryN(add, 5);
add5(1)(2)(3)(4)(5); //=> 15

var add3 = curryN(add, 3);
add3(1)(2)(3); //=> 6

根本无法避免这种情况,因为柯里化函数将继续返回一个函数,直到收到最后一个参数,此时运行计算。


唯一的其他选择是创建某种方法来“短路”参数并通知函数参数已完成发送。那需要类似的东西

var xadd = curryUntilUndefined(add);
xadd(1)(2)(3)(4)(5)(undefined); //=> 15

在这里,undefined标志着可变参数的结束。我真的不推荐这个,因为它会给你带来其他问题。更不用说,它看起来并不是特别好看。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编写一个柯里化的 JavaScript 函数,该函数可以被调用任意次数,并在最后一次函数调用时返回一个值 的相关文章