此功能按预期工作:



const leftCharTrim = (c, s) => s.charAt(0) === c ? leftCharTrim(c, s.slice(1)) : s
console.log(leftCharTrim('a', 'abc'))





但咖喱版本不起作用:



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'))

08-07 15:24