如何使函数可以使用多个参数调用,因此您可以使用 f(x,y) 而不是 f(x)(y)

How to make functions callable with multiple parameters, so instead of f(x)(y) you can do f(x,y)

给定以下数据结构

var categories = [
  {_id: 1, order: 0, ancestors: []},
    {_id: 2, order: 0, ancestors: [1]},
    {_id: 3, order: 0, ancestors: [1]},
  {_id: 4, order: 0, ancestors: []},
  {_id: 5, order: 0, ancestors: [4]},
]

和函数

var byLevel = R.curry((level) => R.filter(o => o.ancestors.length == level))
var levelZero = byLevel(0);

我希望能够像这样调用这两个:-

console.log(byLevel(0,categories));
console.log(levelZero(categories));

并得到相同的结果(id 为 1 和 4 的两个类别的数组)

不过按级别returns一个函数。我可以这样称呼它

console.log(byLevel(0)(categories));

它做我想做的事。但是如果我像这样写 byLevel :-

var byLevel = R.curry((level, l) => R.filter(o => o.ancestors.length == level, l))

然后

console.log(byLevel(0,categories));

工作正常,咖喱也很好。但是,好像不像"clean".

问题

有没有 "Ramda" 方法来实现,这样我就可以定义函数,这样我就可以 f(x,y) 而不是 f(x)(y)

我想这就是全部了:

var byLevel = R.curry((level, categories) => 
    R.filter(o => o.ancestors.length == level, categories)
);

如果您想柯里化一个函数以允许自己以这种方式提供参数,则必须列出它们。