JavaScript/Ramda中与Clojure'等价的函数;s juxt

JavaScript/Ramda中与Clojure'等价的函数;s juxt,javascript,clojure,clojurescript,ramda.js,Javascript,Clojure,Clojurescript,Ramda.js,我需要JavaScript中Clojure的juxt函数的功能。是否有用于此的本机函数?我们用的是电脑。是否有带有juxt功能的Ramda函数 我知道,当然,我可以自己写这个函数。这是为了教育目的。在某种程度上,这看起来像是你想要的。有几种方法可以实现这一点 ,将给定值通过提供列表中的每个函数传递,然后将每个函数的结果用作作为第一个参数提供的函数的相应参数位置,以收敛-可能用图表更好地解释: add = (a, b) => a + b incr = a => a + 1 decr

我需要JavaScript中Clojure的
juxt
函数的功能。是否有用于此的本机函数?我们用的是电脑。是否有带有juxt功能的Ramda函数


我知道,当然,我可以自己写这个函数。这是为了教育目的。

在某种程度上,这看起来像是你想要的。

有几种方法可以实现这一点

,将给定值通过提供列表中的每个函数传递,然后将每个函数的结果用作作为第一个参数提供的函数的相应参数位置,以
收敛
-可能用图表更好地解释:

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.comment
采用某种应用类型的列表,并有效地将其从内到外转换为某种列表的应用,其中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]);

拉姆达曾讨论过这一点,但最终由于没有人支持这一想法而被放弃。请随时将其恢复。

从v0.19.0版开始,Ramda添加了

@zerkms-将函数包装在数组中,并将集合包装在数组中提供相同的功能!你应该把这个作为答案。我喜欢你的ascii图表。这两种机制是有道理的。尽管看起来
R.ap
更像是
juxt
。我意识到,我认为使用
ap
juxt
之间的区别在于
ap
取决于只接受一个参数的函数。如果我理解正确的话,这是一个相当严重的限制。为此,我认为应该将
juxt
函数添加到Ramda中。
ap
是关于与的兼容性。与juxt的任何相似之处都是有益的巧合。