Ramda撰写传递多个参数

时间:2019-04-27 13:53:03

标签: javascript functional-programming ramda.js

如何将多个输入传递给合成内部的函数?

const scaleLinear = R.curry((domain,range,t)=>{
    let [a,b] = domain,
        [c,d] = range;
    return (1 - (t-a)/(b-a))*c + (t-a)(b-a)*d;

//getDomain: arr1 -> [xmin,xmax]
//getRange:  arr2 -> [ymin,ymax]
const scale = R.compose(scaleLinear, getDomain, getRange);

显然上述方法不起作用,但是有什么替代方法,这样我最终可以传递2个数据(arr1,arr2),并得出适当的标度?

1 个答案:

答案 0 :(得分:4)

在R.com中,仅最右边的(底部)函数的Arity可以大于1。它接收传递给组合函数的参数,返回单个值,然后将其传递给函数的左侧,然后等等。

在您的情况下,您想转换scaleLinear的参数,而不要对值应用多个函数。您可以通过应用R.useWith和一系列转换器来转换函数的参数:

const scale = R.useWith(scaleLinear, [getDomain, getRange, R.identity])

现在您可以像这样使用scale

scale(arr1, arr2, 10)