微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重构 `f(g(x))(x)` 以便我可以很好地组合它

如何解决重构 `f(g(x))(x)` 以便我可以很好地组合它

我有几个函数目前是这样编写的(以抽象形式)...

const someFunction = x => f(g(x))(x);

  1. x 传入 g获取输出
  2. 然后将该输出传递给 f 以获得 function
  3. 然后将 x 传递给那个 function

由于嵌套的括号、现实世界的函数名称以及 x 等的多次使用,感觉有点笨重...

我一直在使用 lodash/fp,我的第一个想法是 _.flow,但最后我仍然需要将 x 传递到流的输出中。

嗯...除非我颠倒 f 中参数的顺序,否则我可以做...

const someFunction = x => _.flow(g,f(x))(x);

我认为这会起作用,因为 f(x) 会将 x 传递给 f获取函数。然后这个 _.flow(g,f(x))(x) 会将 x 传递给 g,然后将它的输出传递给从 f 返回的结果柯里化函数

虽然它仍然很笨重。对此并不完全满意。是否有另一种更优雅/更易读的方法可以建议。

解决方法

感谢@Ori_Drori 的输入,我创建了一个函数...

const chain = _.curry((f,g,x) => f(g(x))(x));

然后我的代码开始是...

const myOldFunction = (x) => f(g(x))(x);

变成了……

const myAwesomeNewFunction = chain(f,g);

这使得它更具可读性,并将它变成了一个具有单一输入的函数,这意味着我可以让它指向自由,然后将它非常好地放入我的其余函数中。 ??

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。