下面我有一个基本的递归来返回传递的值,我想知道如何处理一个函数没有任何参数- 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
发布于 2019-10-28 23:39:30
你真的不能得到你所提议的行为。
想一想这两行:
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"但这是一个不同的问题。
https://stackoverflow.com/questions/58592299
复制相似问题