【问题标题】:Difference between curry and curryRight in LodashLodash 中 curry 和 curryRight 的区别
【发布时间】:2018-01-05 10:47:04
【问题描述】:

Lodash 中的currycurryRight 有什么区别?

是否只是将提供的参数的应用顺序从f(a,b,c)(适用于f(a) -> f(b) -> f(c))切换到f(a,b,c),然后再适用于f(c) -> f(b) -> f(a)

我已经查看了 Lodash 文档,但这对我没有帮助。

【问题讨论】:

  • 你的理解是正确的。它在概念上也与_.curry(_.flip(f)); 相同。
  • 文档中有一些示例。有没有什么特别的例子让你感到困惑?
  • 我猜如果一种是正确的咖喱方法,另一种肯定是错误的:D
  • Bergi,你成就了我的一天

标签: javascript functional-programming lodash currying


【解决方案1】:

来自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。我不知道为什么,但是没有它会导致异常。

【讨论】:

  • 谢谢,这对我帮助很大。事实上,让我感到困惑的是文档中的最后一个示例。但现在我明白了:)
猜你喜欢
  • 2017-04-26
  • 2023-03-20
  • 1970-01-01
  • 2014-02-27
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 2017-03-21
相关资源
最近更新 更多