首页 > 解决方案 > 如何检查链接的功能数量?

问题描述

我正在尝试解决 CodeWars 上的以下问题:链添加功能

我们想创建一个函数,在连续调用时将数字相加。

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 

我了解了“currying”是什么,但是在我的 main 函数中返回一个函数只会满足add(1)(2)<-- 2 个链式函数。同样,我试图在这里链接任意数量的函数,但我似乎无法弄清楚。

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

我想问有没有办法检查链式函数的长度?除了我的问题,我会很感激一些提示,我并不是要一个完整的答案。

标签: javascriptcurrying

解决方案


我不可能连续输入 7 个函数,然后依次返回

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

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

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

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

提示1:

==不是同一种平等===

提示2:

valueOf

提示 3:

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

提示4:

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

提示 5:

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


推荐阅读