javascript - JS curry 递归处理空参数

标签 javascript recursion currying

下面我有一个基本的递归来返回传递的值,我想知道如何处理没有任何参数的函数 - 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

最佳答案

你确实无法实现你所提议的行为。

考虑这两行:

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"

但这是一个不同的问题。

关于javascript - JS curry 递归处理空参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58592299/

相关文章:

javascript - 在javascript中添加一个html链接按钮

javascript - 是否可以增加 SpiderMonkey 中的递归限制?

linux - 如何在现有文件夹树中(在每个现有文件夹中)递归创建文件夹?

javascript - 动态柯里化(Currying),以及如何在 JavaScript 变量中同时保存函数和值

haskell - curry 语言的 CPS

javascript - 从 requirejs 迁移到 webpack

javascript - 在切换时隐藏滑过

javascript - 为什么 IF else google app 脚本公式不能产生正确的值?

c++ - std::swap 在 VS 2013 中导致无限递归

haskell - 为什么 Haskell 采用一个参数