首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS curry递归处理空参数

JS curry递归处理空参数
EN

Stack Overflow用户
提问于 2019-10-28 21:59:40
回答 1查看 71关注 0票数 0

下面我有一个基本的递归来返回传递的值,我想知道如何处理一个函数没有任何参数- curry()(),但如果用参数调用相同的函数- curry()()("b"),仍然允许返回值。

代码语言:javascript
复制
function curry(x) {

    if (x === "b") {
        return "Banana";
    }

    const t = (...y) => {
        if (y[0] === "a") {
            return "Apple"
        }
        if (y[0] === "S") {
            return "Strawberry"
        }
        
        //if() {
          //return "Hello World"
        //}

        return t;

    }
    return t;
}

curry("b") //? Banana
curry()("a") // ? Apple
curry()()()()()("S"); //? Strawberry

curry()(); //? Hello world

EN

回答 1

Stack Overflow用户

发布于 2019-10-28 23:39:30

你真的不能得到你所提议的行为。

想一想这两行:

代码语言:javascript
复制
curry()()()()()("S"); //=> Strawberry  // (1)
curry()(); //=> Hello world            // (2)

第一个(1)可以重写为

代码语言:javascript
复制
let foo = curry()();                   // (1a)
foo()()()("S");                        // (1b)

但是我们已经从第二行(2)知道了

代码语言:javascript
复制
curry()() //=> "Hello world"

它不是一个函数,所以foo()试图调用"Hello world",就好像它是一个函数一样。

我不认为有任何方法可以绕过这一点。

您可以编写一个可以反复调用的函数,总是返回另一个函数,该函数具有您可以测试的属性,因此,例如

代码语言:javascript
复制
curry()().value //=> "Hello world"
// and
curry()()()()()("S").value //=> "Strawberry"

但这是一个不同的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58592299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档