此功能按预期工作:
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'))