【问题标题】:Applying a list of functions to a list of arguments using Ramda使用 Ramda 将函数列表应用于参数列表
【发布时间】:2021-04-25 18:50:20
【问题描述】:

Ramda 中是否有一个函数可以将函数列表应用于类似于juxt() 的参数列表,但每个函数仅在参数列表中的相应索引处提供参数?类似于:

pipe(zip, map(([a, b]) => a(b)))([func1, func2], ['arg1', 'arg2']);

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: javascript functional-programming ramda.js


    【解决方案1】:

    使用 R.zipWith 从提供的两个列表中创建一个新列表,通过将函数应用于列表中的每个等位对。

    您也可以将回调替换为 R.call,它会调用第一个参数,并将其余的作为参数传递。

    const { zipWith, call } = R;
    
    const fn = zipWith(call);
    
    const func1 = R.add(1);
    const func2 = R.add(2);
    
    const result = fn([func1, func2], [1, 2]);
    
    console.log(result);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js" integrity="sha512-rZHvUXcc1zWKsxm7rJ8lVQuIr1oOmm7cShlvpV0gWf0RvbcJN6x96al/Rp2L2BI4a4ZkT2/YfVe/8YvB2UHzQw==" crossorigin="anonymous"></script>

    【讨论】:

    • 我从来都不是call 的粉丝,但恕我直言,使用zipWith 绝对是正确的做法。
    • R.call 有点混乱,但它反映了本机调用。你还有其他不使用它的理由吗?
    • 无。纯属个人口味。我会写 zipWith((a, b) => a(b)) 以匹配上面的 map(…) 并使事情稍微更明显(在文档中查找少一件事)但我只是在吹毛求疵。跨度>
    猜你喜欢
    • 2016-04-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多