【发布时间】:2020-05-10 02:14:43
【问题描述】:
假设我有一个函数列表,我想用相同的参数调用这些函数并获得一个结果列表。这是我的setup:
let input = 2
let fns = [add(2), add(3), add(4)]
map(x => x(input), fns)
// this is what I want. Outputs [4, 5, 6]
但我不太喜欢箭头函数的使用(纯粹出于文体原因),所以我想将其重写为,
map(call(__, input), fns)
// this doesn't work and produces [[Function],[Function],[Function]]
我不明白为什么x => x(input) 不等于call(__, input)。我的想法是,call(__, input) 将返回一个函数,该函数将使用input 调用其第一个参数。
你能解释一下我做错了什么吗?我的预感是我误解了__ 的用法。以及如何使用call 或其他一些内置函数来优雅地编写这个?
我也试过了,
// this also works and produces [4, 5, 6]
map(flip(call)(input), fns)
但由于文体原因,这也不适合我。我觉得我在用flip 硬塞东西,我也不喜欢连续的函数调用(...)(...)。
【问题讨论】:
-
箭头函数是未来。学习它们,使用它们。可以添加add(...)函数的代码吗?
-
@aepifano:我认识他们。我一直在使用它们,对它们没有任何反对意见。我只是不明白为什么这两个东西不等价,就是这样。
标签: javascript ramda.js