javascript - 部分应用程序在递归函数中不起作用
问题描述
此功能按预期工作:
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'))
推荐阅读
- algorithm - BBatch 错误 - 从 bbatch 读取数据时出错
- google-tag-manager - 需要帮忙。即使在用户注册或通过电子邮件在我的网站上登录后,所有联系人也显示为匿名
- testing - 如何模拟网络负载以测试两台服务器之间的连接性?
- sql-server - 如何根据格林威治标准时间计算当地时间?
- javascript - Chrome 扩展,选项页面,显示黑色矩形而不是列表
- c# - 让 Unity 显示 StyleCop 错误
- r - Can I pass a textInput to a Regex search
- mysql - 当内部连接值可能为空时,如何填充表?
- javascript - JS 使用与对象键相同的引号解析包裹在字符串中的对象
- javascript - 迭代对象