我正在尝试更好地理解ramda.js中的函数组合,目前在一个类中有一个方法,看起来像这样:
const replace = (newItem) => function3(function1(newItem).function2(newItem));
我知道在ramda.js中有一个更简单的函数,比如
const replace = (newItem) => function2(function1(newItem));
你可以把它写成
const replace = compose(function2, function1);
有没有类似的方法来使用函数组合/应用程序或其他ramda.js助手方法对初始函数执行相同的操作?
发布于 2018-07-27 12:33:55
所以你的问题是如何写
function1(input).function2(input)
以函数式的方式。如果我是正确的,这里是怎么做的:
首先,让我们创建一个函数method
,它将为我们提供一个绑定到该对象的对象的方法:
const method = R.curry((name, object) => R.bind(object[name], object))
使用此函数,我们可以将表达式重写为
method('function2', function1(input))(input)
但我们想要更干净、更可重用的东西,对吧?所以让我们来做一些重构
method('function2', function1(input))(input)
method('function2')(function1(input))(input)
R.pipe(function1, method('function2'))(input)(input) // or use R.compose
R.converge(R.call, [
R.pipe(function1, method('function2')),
R.identity
])(input)
现在我们可以像这样定义函数combine
const combine = (fn, name) =>
R.converge(R.call, [
R.pipe(fn, method(name)),
R.identity
])
并且表达式变成
combine(function1, 'function2')(input)
我希望我的解释是清楚的,它解决了您的问题:)
https://stackoverflow.com/questions/51546033
复制相似问题