Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ramda中调用具有相同参数的函数列表_Javascript_Ramda.js - Fatal编程技术网

Javascript 在ramda中调用具有相同参数的函数列表

Javascript 在ramda中调用具有相同参数的函数列表,javascript,ramda.js,Javascript,Ramda.js,假设我有一个函数列表,我想用相同的参数调用这些函数,并得到一个结果列表。这是我的: 让输入=2 设fns=[添加(2),添加(3),添加(4)] 映射(x=>x(输入),fns) //这就是我想要的。产出[4、5、6] 但我不太喜欢使用箭头函数(纯粹出于风格原因),所以我想将其改写为 map(调用(\uuuuuu,输入),fns) //这不起作用并产生[[函数],[函数],[函数]] 我不明白为什么x=>x(输入)不等同于call(\uuuuuu,输入)。我的想法是,call(\uuuu,i

假设我有一个函数列表,我想用相同的参数调用这些函数,并得到一个结果列表。这是我的:

让输入=2
设fns=[添加(2),添加(3),添加(4)]
映射(x=>x(输入),fns)
//这就是我想要的。产出[4、5、6]
但我不太喜欢使用箭头函数(纯粹出于风格原因),所以我想将其改写为

map(调用(\uuuuuu,输入),fns)
//这不起作用并产生[[函数],[函数],[函数]]
我不明白为什么
x=>x(输入)
不等同于
call(\uuuuuu,输入)
。我的想法是,
call(\uuuu,input)
将返回一个函数,该函数将使用
input
调用其第一个参数

你能解释一下我做错了什么吗?我的直觉是,我误解了
\uuu
的用法。如何使用
call
或其他内置函数优雅地编写此代码

我也试过,

// this also works and produces [4, 5, 6]
map(flip(call)(input), fns)
//这也起作用并产生[4,5,6]
映射(翻转(调用)(输入),fns)
但由于风格原因,这也不适合我。我觉得我在用
flip
钉东西,而且我也不喜欢连续的函数调用
(…)(…)

您正在寻找:

juxt将函数列表应用于值列表

const{add,juxt}=R
常量输入=2
常量fns=[添加(2)、添加(3)、添加(4)]
常量addTo=juxt(fns)
常量结果=添加到(输入)
console.log(结果)

Ori Drori证明了juxt会做你想做的事

至于为什么
call
不起作用。。。老实说,这可能是Ramda中设计最差的功能。(我是Ramda的创始人之一,我想这是我写的,所以除了我自己,我没有侮辱任何人。)

几乎没有必要这样做。既然你可以写
fn(1,2)
,为什么还要写
call(fn,1,2)
。咖喱不能正常工作,因为它是可变的,这本身就是一个问题。即使是这个例子也很不清楚,主要是因为很难找到任何有意义的例子

我个人会跳过使用它

但我不太喜欢使用箭头函数(纯粹出于风格原因),所以我想将其改写为

从这些注释中,我假设您不是指箭头函数,而不是函数声明或函数表达式,而是更愿意编写这一点。建议:使用无点样式,使代码更具可读性,但在不可读时跳过它;不要把它当作恋物癖

这里的
juxt([add(2),add(3),add(4)])
看起来不错,只要
juxt
(缩写为
juxtapose
)对您有意义。但通常情况下,推动积分自由似乎弊大于利

我也试过,

// this also works and produces [4, 5, 6]
map(flip(call)(input), fns)
但由于风格原因,这也不适合我。我觉得我好像在用
flip
,

我倾向于同意<代码>翻转对于几乎任何问题都不是一个很好的解决方案。但我通常更不喜欢占位符。没有什么能让我满意的

我也不喜欢连续的函数调用
(…)(…)


在这方面,我不同意。我把自己的代码换成了一种几乎全是咖喱的风格。如果这涉及到多个连续的函数调用和可怕的括号,那就这样吧。我只是觉得它更容易使用和推理。

箭头功能是未来的趋势。学习它们,使用它们。你能添加add(…)函数的代码吗?@aepifano:我知道。我一直在使用它们,对它们没有任何抵触。我只是不明白为什么这两件事不相等,就是这样。难以置信。谢谢你,谢谢你的洞察力。至于
call
的可用性,我认为任何形式的
fn(,knownArg)
都会受益于占位符。但我们再次看到,在Ramda中,数据排在最后,如果函数以这种方式设计,我们将永远不会首先需要占位符。@sampathsris:同意。但是由于
调用
的设计很差,我们不能这样做,因为我们不知道会有多少参数<代码>翻转
仍然有效,因为它只关心前两个参数,将其余参数传递给其他参数。