JS карри рекурсия обрабатывает пустые параметры - PullRequest
0 голосов
/ 28 октября 2019

Ниже у меня есть базовая рекурсия для возврата значений, которые передаются, мне интересно, как обрабатывать, если функция без каких-либо параметров - 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

1 Ответ

1 голос
/ 28 октября 2019

Вы действительно не можете понять, какое поведение вы предлагаете.

Подумайте об этих двух строках:

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"

Но это другой вопрос.

...