web*_*ath 5 javascript functional-programming variadic-functions ramda.js
我需要的可变版本R.either。在网上搜索后,我没有找到解决方案。R.anyPass可以,但是它返回一个布尔值而不是原始值。是否已经有我忽略的解决方案?如果没有,那么编写可变参数的两个效用函数的最佳方法是什么?
一个例子:
const test = variadicEither(R.multiply(0), R.add(-1), R.add(1), R.add(2))
test(1) // => 2
Run Code Online (Sandbox Code Playgroud)
reduce您可以使用+的组合reduced:
const z = (...fns) => x => reduce((res, fn) => res ? reduced(res) : fn(x), false, fns);
console.log(
z(always(0), always(10), always(2))(11),
z(always(0), always(''), always(15), always(2))(11),
)Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>
<script>const {reduce, reduced, always} = R;</script>Run Code Online (Sandbox Code Playgroud)
(之前的尝试)
我会做这样的事情:
const z = unapply(curry((fns, x) => find(applyTo(x), fns)(x)));
console.log(
z(always(0), always(15), always(2))(10),
z(always(0), always(''), always(NaN), always(30), always(2))(10),
);Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>
<script>const {unapply, curry, find, applyTo, always} = R;</script>Run Code Online (Sandbox Code Playgroud)
但对此有三个主要警告!
z两个“pass”,即z(...functions)(x)| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |