gpt4 book ai didi

javascript - 编写一个可以调用任意次数的 curried javascript 函数,它在最后一次函数调用时返回一个值

转载 作者:数据小太阳 更新时间:2023-10-29 06:15:45 26 4
gpt4 key购买 nike

我目前正在利用个人时间处理一个编程问题,要求我制作一个可以以这种方式调用的 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 函数被连续调用了多少次,但我想不出一种方法来实现它。有没有人有任何提示可以指出正确的方向?

我已经阅读了这两篇关于函数柯里化(Currying)的文章(12)并且我理解它们,但是我不确定在处理可变数量的参数时如何进行柯里化(Currying)。

最佳答案

柯里化(Currying)参数数量未知的可变参数函数是不可能的。

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

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

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

这根本无法避免,因为柯里化(Currying)函数将继续返回一个函数,直到接收到最后一个参数,此时计算开始运行。


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

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

此处,undefined 表示可变参数结束。我真的不推荐这个,因为它会给你带来其他问题。还别说,看着也不是特别好看。

关于javascript - 编写一个可以调用任意次数的 curried javascript 函数,它在最后一次函数调用时返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33901793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com