首页 > 解决方案 > 部分应用程序在递归函数中不起作用

问题描述

此功能按预期工作:

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使用第二个参数调用会返回一个函数。为什么?

标签: javascriptrecursioncurrying

解决方案


您需要再次调用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'))


推荐阅读