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>
您可以将 or
与 reduce
一起使用:
reduce(or, false, [0, 0, 42, 0, 1]);
//=> 42
然而,这不会 return 比 0 || 0 || 42 || 0 || 1
早。根据您的数据集,这可能是也可能不是问题。
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.andconst { 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>
您可以将 or
与 reduce
一起使用:
reduce(or, false, [0, 0, 42, 0, 1]);
//=> 42
然而,这不会 return 比 0 || 0 || 42 || 0 || 1
早。根据您的数据集,这可能是也可能不是问题。