【发布时间】:2020-07-22 10:36:18
【问题描述】:
我的团队正在从 Lodash 迁移到 Ramda,并进入函数式编程风格的更深层次。我们一直在用compose 等进行更多试验,并遇到了这种模式:
const myFunc = state => obj => id => R.compose(
R.isNil,
getOtherStuff(obj),
getStuff(state)(obj)
)(id)
(我们当然可以省略=> id 和(id) 部分。为清楚起见添加。)
换句话说,我们的应用程序中有很多函数(在某些情况下是 React+Redux),我们需要组合接受相似参数的函数,或者最后一个函数需要在传递给compose 行中的下一个函数。在我给出的示例中,这将是 id 然后是 obj 然后是 state 对于 getStuff。
如果不是 getOtherStuff 函数,我们可以 R.curry myFunc。
是否有一个优雅的解决方案,将是免费的?这在 FP 中似乎很常见。
【问题讨论】:
-
我觉得这很易读(尤其是没有
id。)我建议你不要争取点免费。当它使代码更具可读性时使用它,而不是当您需要努力寻找版本时使用它。 Ramda(免责声明:我是它的主要作者之一)有时会考虑可能使其中一些更简单的技术(最近在#2930),但没有一个真正获得牵引力。 -
wat @ScottSauyet 说。我从思考中受益,无点是一个很好的思考练习 - 但目标是可维护性。
-
你在创建一个选择器吗?
-
@OriDrori 大多数时候是的,虽然这种模式也出现在我们的其他地方。
-
您是否使用reselect 来进行reducers?它与 Ramda 和无点风格完美结合。
标签: javascript functional-programming ramda.js