要使用一个包含多个参数的函数进行组合,请多次使用组合-尽管您需要使用
R.o
而不是
pipe
或
compose
以下内容:
// sum: [Number] -> Number
// range: Number -> Number -> [Number]
// getSum: Number -> Number -> Number
const getSum = R.o(R.o(R.sum), R.range);
为了提供curried函数的最后一个参数,最简单的ramda解决方案是使用
a placeholder
以下内容:
// stepRange: Number -> Number -> Number -> [Number]
// range: Number -> Number -> [Number]
const range = stepRange(R.__, R.__, 1);
但这只适用于ramda自己创建的函数
curryN
或
curry
,而不是手动执行的功能。有了这些,你只能
R.flip
直到可以部分应用第一个参数:
// stepRange: from -> to -> step -> range
// flip(stepRange): to -> from -> step -> range
// o(flip, stepRange): from -> step -> to -> range
// flip(o(flip, stepRange)): step -> from -> to -> range
// range: from -> to -> range
const range = R.flip(R.o(R.flip, stepRange))(1);
我真的不推荐这么做。一切皆有可能,但这是不可读的。只需写出参数:
const getSum = R.o(R.o(R.sum), R.flip(R.o(R.flip, stepRange))(1));
// vs
const getSum = from => to => R.sum(stepRange(from)(to)(1));