Ramda:将二进制函数转换为任意参数函数

Ramda: convert binary function to arbitrary arity function

Ramda 有很酷的 or 功能,它在合成管道中替代了 (a, b) => a || b。但关键是这是二元函数,只接受两个参数。我需要将它与任意数量的参数一起使用,充当通用 || 运算符。 (a, b, c) => a || b || c 对如何使用 ramda 的工具集实现它有什么想法吗?

您可以通过使用 R.any 和 R.identity 并使用 R.unapply 将参数转换为数组来创建类似的函数。但是,这个函数不能柯里化,因为参数的数量是未知的。

const { unapply, any, identity } = R

const fn = unapply(any(identity))

console.log(fn(false, false, false))

console.log(fn(false, false, true))

console.log(fn(false, false, false, true))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js" integrity="sha512-rZHvUXcc1zWKsxm7rJ8lVQuIr1oOmm7cShlvpV0gWf0RvbcJN6x96al/Rp2L2BI4a4ZkT2/YfVe/8YvB2UHzQw==" crossorigin="anonymous"></script>

您可以通过使用 R.all:

来模拟具有多个参数的 R.and

const { unapply, all, identity } = R

const fn = unapply(all(identity))

console.log(fn(false, false, false))

console.log(fn(false, false, true))

console.log(fn(true, true, true, true))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js" integrity="sha512-rZHvUXcc1zWKsxm7rJ8lVQuIr1oOmm7cShlvpV0gWf0RvbcJN6x96al/Rp2L2BI4a4ZkT2/YfVe/8YvB2UHzQw==" crossorigin="anonymous"></script>

您可以将 orreduce 一起使用:

reduce(or, false, [0, 0, 42, 0, 1]);
//=> 42

然而,这不会 return 比 0 || 0 || 42 || 0 || 1 早。根据您的数据集,这可能是也可能不是问题。