如何检查链接的函数数量?

问题描述

我正在尝试解决 CodeWars 上的以下问题:A Chain adding function

我们想创建一个函数,当 连续调用

add(1)(2);
// returns 3

我们还希望能够继续向我们的链中添加数字。

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

等等。

单个调用应返回传入的号码。

 add(1); // 1

我们应该能够存储返回的值并重用它们。

var addTwo = add(2);
addTwo; // 2
addTwo + 5; // 7
addTwo(3); // 5
addTwo(3)(5); // 10

我们可以假设传入的任何数字都是有效的整数。

我尝试了很多小时,但都无济于事。喜欢例如。

add(1)(2)(4) <--- 3 chained functions 

我了解了“柯里化”是什么,但是在我的主函数中返回一个函数只会满足 add(1)(2)

如果示例测试是 add(5)(13)(3)(10)(5)(6)(20),那就是 7 个链接函数...我不可能连续输入 7 个函数,除了第一个函数(主函数)之外,一个一个地返回。

请问有没有什么方法可以检查链式函数的长度?除了我的问题,我希望得到一些提示,我并不是要一个完整的答案。

解决方法

我不可能在一行中输入 7 个函数返回一个在另一个之前

这就是为什么您需要创建一个递归解决方案,使其适用于任何链长。

我应该补充一点,为了解决这个问题,您必须非常仔细地查看测试过的内容。这是一项测试:

Test.expect(add(1)(2)(3) == 6);

特别注意使用的相等运算符。这应该会提示您如何返回一个值,该值既可以用于进一步链接, 可以同时等于一个数字。

提示 1:

=====

不是同一种等式

提示 2:

valueOf

提示 3:

函数是对象。它们可以像任何其他对象一样拥有自定义属性。

提示 4:

确保返回一个函数,该函数具有返回当前总和值的自定义 valueOf 方法。

提示 5:

使用递归调用,传递给它的总和:
1.传递给最外层函数调用的参数
2. 传递给返回函数的参数