Javascript 使用Ramda将多参数函数转换为无点样式

Javascript 使用Ramda将多参数函数转换为无点样式,javascript,functional-programming,ramda.js,Javascript,Functional Programming,Ramda.js,使用,我试图将一个相当大的函数转换成一个无点函数,这是出于教育和风格的原因 该函数接受4个参数、一个ES6映射、一个接受对象并返回对象的domainModel函数、一个标识映射上设置的内容的键属性,以及一个由domainModel调用后在映射上设置的json属性 现在,我已经对函数进行了一些功能优化,但如果可能的话,我希望使用无参数版本。我已经成功地在参数较少的函数上使用了无点风格,但我不能完全确定接近这个的正确角度 专门化函数 curry的全部要点是,它允许您使用绑定的每个参数专门化函数。这使

使用,我试图将一个相当大的函数转换成一个无点函数,这是出于教育和风格的原因

该函数接受4个参数、一个ES6映射、一个接受对象并返回对象的domainModel函数、一个标识映射上设置的内容的键属性,以及一个由domainModel调用后在映射上设置的json属性

现在,我已经对函数进行了一些功能优化,但如果可能的话,我希望使用无参数版本。我已经成功地在参数较少的函数上使用了无点风格,但我不能完全确定接近这个的正确角度

专门化函数

curry的全部要点是,它允许您使用绑定的每个参数专门化函数。这使我们能够编写可以以多种方式专门化的通用函数

常数mult=x=>y=>x*y 常数double=mult 2 常数三=mult 3 常数否定=mult-1 console.logdouble5//10 console.logtriple5//15
console.lognegate5/-5我看不出有什么好办法。无论我们创建了什么样的无点解决方案,都可能比您的解决方案要不那么清晰。有没有令人信服的理由让它自由点?你可能会认为你的函数是不纯洁的,在担心默认定义之前——如果使用ES6 MAP而不是EG不变的话,MAP就会发生突变。Map@ScottSauyet-可能吧,但我一直在努力学习Ramda,试图将我的应用程序转换为无点风格。。。迫使我尝试使用尽可能多的API@naomik——这里的背景是MobX采用可变映射来处理状态。一点点的易变性对你来说还是可以的me@user1787531你用非常有质感的方式谈论函数式编程:风格化、功能性善和少量易变性是好的——我担心你缺少一个坚实的基础,允许你更具体地理解这些概念。关于易变性的具体讨论远远超出了本评论部分的范围,但我建议您在担心问题中提出的一些主题之前,花更多的时间了解基础知识。很好的解构naomik!如果问题出在包装方法调用上,您能做一些类似的事情使其更具可组合性吗?const mapSet=invoke2,set…它的定义方式同样具有可组合性,但是可以肯定的是,您可以对相同的定义使用R.invoker。我认为这会损害可读性并掩盖一些意图,但这是个人观点。@user1787531我对文章开头进行了编辑,这可能有助于你理解currying@user1787531这与未绑定参数的数量无关。组合最适用于一元函数,所有当前函数都是一元函数或一元函数序列。考虑——咖喱是关于抽象的抽象;我们不知道一个函数何时完成,因为另一个函数可能是另一个函数计算的有效结果。如果是这样的话,这个函数可以有效地计算另一个函数,依此类推。另一方面,组合是关于对一元函数排序,而不管任何未绑定的参数。在处理curried函数时,您根本不应该考虑参数的数量。现在只需要知道它接受一个参数,并且有一些返回值。这个返回值可以是任何东西,包括另一个函数——是的,这些概念彼此协调,但不是以任何僵化的方式。
const setNewDomainModelOnMap = curry((map, domainModel, key, json) => map.set(key, domainModel(json)));