此函数按预期工作:
const leftCharTrim = (c, s) => s.charAt(0) === c ? leftCharTrim(c, s.slice(1)) : s
console.log(leftCharTrim('a', 'abc'))
但是柯里化(Currying)版本不起作用:
const leftCharTrim = c => s => s.charAt(0) === c ? leftCharTrim(c, s.slice(1)) : s
const leftTrim = leftCharTrim('a') // partially applied
console.log(leftTrim('abc'))
由于 leftCharTrim
已收到其第一个参数,我希望 leftTrim
是一个等待第二个参数的函数,并在收到它后返回结果,但调用 leftTrim
第二个参数返回一个函数。为什么?
最佳答案
您需要再次使用该字母调用 leftCharTrim
,然后使用第二个参数。
const leftCharTrim = c => s => s.charAt(0) === c ? leftCharTrim(c)(s.slice(1)) : s
// ^^^
const leftTrim = leftCharTrim('a') // partially applied
console.log(leftTrim('abc'))
关于javascript - 部分应用程序在递归函数中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57778216/