JS咖喱递归处理空参数

问题描述 投票:0回答:1

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

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
javascript recursion currying
1个回答
0
投票

您确实无法获得您建议的行为。

考虑这两行:

curry()()()()()("S"); //=> Strawberry  // (1)
curry()(); //=> Hello world            // (2)

第一个(1)可以重写为

let foo = curry()();                   // (1a)
foo()()()("S");                        // (1b)

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

curry()() //=> "Hello world"

这不是一个函数,因此foo()试图像是一个函数一样调用"Hello world"

我不认为这周围没有。

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

curry()().value //=> "Hello world"
// and
curry()()()()()("S").value //=> "Strawberry"

但这是一个不同的问题。

© www.soinside.com 2019 - 2024. All rights reserved.