【发布时间】:2017-10-21 08:20:10
【问题描述】:
过去几天我一直在研究部分应用程序和currying。
我想知道如何将这些概念与只接受一个 options 对象作为参数的函数一起使用。
const myFunc = options => {
const options.option1 = options.option1 || 'default value';
const options.option2 = options.option2 || 'another default value';
// ... etc, it takes about 5 more options, all of which have a
// default fall-back value if not supplied
return doSometing(options);
}
在这种情况下,我不喜欢更改 myFunc 签名并将每个选项作为单独的参数传递,因为记住必须提供选项的顺序很痛苦。
我想坚持函数式风格,避免使用new ... 实例化对象只是为了保持状态;我有一种预感,这可以通过部分应用来实现。当需要测试或实例化时,它可以让事情变得更简单。
但是,我不知道如何在没有单独参数的情况下正确执行部分应用程序。
你会如何处理这个重构?
【问题讨论】:
-
如果你只有一个论点,那就没有什么可咖喱的了……
-
@elclanrs:当然。这是另一种可能很有趣的部分应用形式。
-
它是一个对 request 的包装器,它本身通过它的 options 对象接受了无数个选项。
标签: javascript functional-programming ecmascript-6 currying ramda.js