Lodash中的currycurryRight有什么区别?

只是提供的参数的应用顺序从适用于f(a,b,c)f(a) -> f(b) -> f(c)切换到适用于f(a,b,c)f(c) -> f(b) -> f(a)吗?

我已经研究过Lodash文档,但这并没有帮助我。

最佳答案

documentation:

var abc = function(a, b, c) {
  return [a, b, c];
};

var curried = _.curryRight(abc);

curried(3)(2)(1);
// => [1, 2, 3]

curried(2, 3)(1);
// => [1, 2, 3]

curried(1, 2, 3);
// => [1, 2, 3]

第一个例子很简单。参数的顺序相反(与_.curry相比)。

第二个和第三个可能令人困惑。

在第三个示例中,我们看到参数的顺序没有颠倒。这是因为仅反向应用了currying。换句话说,括号以相反的顺序应用,但是括号内的内容保持原始顺序。

将此与_.curry(_.flip(f))的结果进行比较:
var abc = function(a, b, c) {
  return [a, b, c];
};

var curried = _.curry(_.flip(abc), 3);
 
curried(3)(2)(1);
// => [1, 2, 3]

curried(3, 2)(1);
// => [1, 2, 3]

curried(3, 2, 1);
// => [1, 2, 3]

如您所见,结果是不同。现在,所有示例中的参数顺序都完全相反。

顺便说一句,由于某种原因,我需要在_.curry(_.flip(abc), 3);中将arity指定为3。我不知道为什么,但是那样会导致异常。

07-24 18:15