Ramda 组合传递多个参数

mv3*_*mv3 2 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);
Run Code Online (Sandbox Code Playgroud)

显然上面的方法不起作用,但是有什么替代方法可以让我最终传入 2 条数据(arr1,arr2),并得到适当的比例?

Ori*_*ori 6

在 R.compose 中,只有最右边(底部)函数的 arity 可以大于 1。它接收传递给组合函数的参数,返回单个值,然后将其传递给左侧的函数,依此类推。

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

const scale = R.useWith(scaleLinear, [getDomain, getRange, R.identity])
Run Code Online (Sandbox Code Playgroud)

现在你可以scale这样使用:

scale(arr1, arr2, 10)
Run Code Online (Sandbox Code Playgroud)