JavaScript/Ramda 中与 Clojure 的 juxt 等效的函数
Equivalent function in JavaScript/Ramda as Clojure's juxt
我需要 JavaScript 中 Clojure 的 juxt
函数的功能。有这个的本机功能吗?我们正在使用 Ramda functional JavaScript library。是否有具有 juxt
功能的 Ramda 函数?
我知道,我当然可以自己写这个功能。这是出于教育目的。
在某种程度上,R.ap
看起来像您想要的。
有几种方法可以实现这一点。
R.converge,在将每个函数的结果用作 converge
的第一个参数提供的函数的相应参数位置之前,通过提供的列表中的每个函数传递给定值 - 也许用图表更好地解释:
add = (a, b) => a + b
incr = a => a + 1
decr = a => a - a
double = converge(add, [incr, decr])
------ ---
5 ----| incr |- 6 -| a |
\ ------ | d |- 10
\-| decr |- 4 -| d |
------ ---
这可以用来模拟类似于 juxt
的东西,如下所示:
var argsId = R.unapply(R.identity);
var juxt = R.converge(argsId);
var addSubtract10 = juxt([R.add(10), R.subtract(10)]);
addSubtract10(5); //=> [15, 5]
或者(虽然可能不太直观),R.commute 也可以用于函数列表。 R.commute
获取一些应用类型的列表,并有效地将其内部翻转成为某些列表的应用,其中 Ramda 现在提供的函数的应用行为类似于 converge
。
var juxt = R.commute(R.always);
var addSubtract10 = juxt([R.add(10), R.subtract(10)]);
addSubtract10(5); //=> [15, 5]
还有另一个相当简单的 Ramda 解决方案:
var juxt = R.useWith(R.ap, [R.identity, R.of]);
这在 Ramda 的 issue #986 中进行了讨论,但由于没有人支持这个想法而最终被放弃。随时把它带回来。
从版本 v0.19.0 开始添加 Ramda juxt
我需要 JavaScript 中 Clojure 的 juxt
函数的功能。有这个的本机功能吗?我们正在使用 Ramda functional JavaScript library。是否有具有 juxt
功能的 Ramda 函数?
我知道,我当然可以自己写这个功能。这是出于教育目的。
在某种程度上,R.ap
看起来像您想要的。
有几种方法可以实现这一点。
R.converge,在将每个函数的结果用作 converge
的第一个参数提供的函数的相应参数位置之前,通过提供的列表中的每个函数传递给定值 - 也许用图表更好地解释:
add = (a, b) => a + b
incr = a => a + 1
decr = a => a - a
double = converge(add, [incr, decr])
------ ---
5 ----| incr |- 6 -| a |
\ ------ | d |- 10
\-| decr |- 4 -| d |
------ ---
这可以用来模拟类似于 juxt
的东西,如下所示:
var argsId = R.unapply(R.identity);
var juxt = R.converge(argsId);
var addSubtract10 = juxt([R.add(10), R.subtract(10)]);
addSubtract10(5); //=> [15, 5]
或者(虽然可能不太直观),R.commute 也可以用于函数列表。 R.commute
获取一些应用类型的列表,并有效地将其内部翻转成为某些列表的应用,其中 Ramda 现在提供的函数的应用行为类似于 converge
。
var juxt = R.commute(R.always);
var addSubtract10 = juxt([R.add(10), R.subtract(10)]);
addSubtract10(5); //=> [15, 5]
还有另一个相当简单的 Ramda 解决方案:
var juxt = R.useWith(R.ap, [R.identity, R.of]);
这在 Ramda 的 issue #986 中进行了讨论,但由于没有人支持这个想法而最终被放弃。随时把它带回来。
从版本 v0.19.0 开始添加 Ramda juxt