【发布时间】:2017-03-29 06:10:09
【问题描述】:
使用Ramda,出于教育和文体原因,我正在尝试将一个相当大的函数转换为无点函数。
该函数有 4 个参数,一个 ES6 map,一个接受一个对象并返回一个对象的 domainModel 函数,一个 key 属性识别地图上设置的内容,以及由 domainModel 调用后在地图上设置的 json 属性。
const setNewDomainModelOnMap = curry((map, domainModel, key, json) => map.set(key, domainModel(json)));
现在,我已经对函数进行了 curried,以获得一些功能上的好处,但如果可能的话,我想使用无参数版本。我已经成功地在具有较少参数的函数上采用了无点风格,无法完全找出接近这个的正确角度。
【问题讨论】:
-
我没有看到任何好的方法来做到这一点。无论我们创建什么无点解决方案,都可能比您那里的解决方案清晰得多。是否有任何令人信服的理由让它免积分?
-
在担心默认定义之前,您可能会认为您的函数是不纯的——如果您使用 ES6 Map 而不是(例如)Immutable.Map,
map会发生变异 -
@ScottSauyet - 可能,但我一直在学习 Ramda 尝试将我的应用程序转换为无点样式......迫使我尝试使用尽可能多的 API!
-
@naomik - 这里的背景故事是 MobX 采用可变映射来处理状态。一点点可变性对我来说还是可以的
-
@user1787531 您以非常定性的方式谈论函数式编程:“风格”、“为函数式优点而柯里化” 和 “很少有点可变性是可以的” - 我担心你缺少一个坚实的基础,可以让你以更具体的方式理解这些概念。关于可变性的具体讨论超出了本评论部分的范围,但我建议您在担心问题中提出的一些主题之前花更多时间了解基础知识。
标签: javascript functional-programming ramda.js