【问题标题】:Ramda compose passing multiple argumentsRamda compose 传递多个参数
【发布时间】:2019-04-29 22:37:32
【问题描述】:

我们如何将多个输入传递给组合内的函数?

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),并得到适当的比例?

【问题讨论】:

    标签: javascript functional-programming ramda.js


    【解决方案1】:

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

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

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

    现在你可以像这样使用scale

    scale(arr1, arr2, 10)
    

    【讨论】:

    • 漂亮,我迷上了 fp 和 ramda,它更有趣
    猜你喜欢
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 2018-04-25
    相关资源
    最近更新 更多