Ramda Converge 导致函数错误
Ramda Converge causing error with arity of function
我认为我对 converge
的工作方式有一个合理的处理,但我一直在盯着这个问题和它的批评者(对我来说),错误消息有点,似乎没有任何东西跳出来在我身上。
最小示例
const first = pipe(
inc,
num => compose(multiply(num), multiply(num))
)(9)(1);
console.log("First: ", first);
const second = pipe(
inc,
converge(compose, [multiply, multiply])
)(9)(1);
console.log("Second: ", second);
输出:
First: 100
Error: First argument to _arity must be a non-negative integer no greater than ten
您对 converge
的理解可能非常接近。这当然是可以理解的尝试。
这里的问题是,当 converge
运行时,它会创建一个新函数,该函数将调用每个转换函数,然后将这些结果传递给主函数。这个return函数的元数是那些转换函数的最大元数。
因此converge (compose, [multiply, multiply])
大致等同于curry ((a, b) => compose (multiply (a, b), multiply (a, b))
,因为multiply
的元数是2
。但这意味着 compose
在我们已经收到两个被乘数之前不会被调用。
您可以通过更改您提供的乘法函数来改变它。这有效:
pipe (
inc,
converge (compose, [mult, mult])
) (9) (1)
有了这个:
const mult = (a) => (b) => a * b
或者这个:
const mult = unary (multiply)
或者这个:
const mult = uncurryN (1, multiply)
我担心 Ramda 神奇的柯里化虽然经常有用,但偶尔也会导致这样的问题。如果我们推出 1.0 版,我将尝试说服 Ramda 团队的其他成员在下一个版本中切换到简单柯里化。或者也许那是完全不同的图书馆。
Ramda 也迫切需要处理其错误消息。
总有一天。
我认为我对 converge
的工作方式有一个合理的处理,但我一直在盯着这个问题和它的批评者(对我来说),错误消息有点,似乎没有任何东西跳出来在我身上。
最小示例
const first = pipe(
inc,
num => compose(multiply(num), multiply(num))
)(9)(1);
console.log("First: ", first);
const second = pipe(
inc,
converge(compose, [multiply, multiply])
)(9)(1);
console.log("Second: ", second);
输出:
First: 100
Error: First argument to _arity must be a non-negative integer no greater than ten
您对 converge
的理解可能非常接近。这当然是可以理解的尝试。
这里的问题是,当 converge
运行时,它会创建一个新函数,该函数将调用每个转换函数,然后将这些结果传递给主函数。这个return函数的元数是那些转换函数的最大元数。
因此converge (compose, [multiply, multiply])
大致等同于curry ((a, b) => compose (multiply (a, b), multiply (a, b))
,因为multiply
的元数是2
。但这意味着 compose
在我们已经收到两个被乘数之前不会被调用。
您可以通过更改您提供的乘法函数来改变它。这有效:
pipe (
inc,
converge (compose, [mult, mult])
) (9) (1)
有了这个:
const mult = (a) => (b) => a * b
或者这个:
const mult = unary (multiply)
或者这个:
const mult = uncurryN (1, multiply)
我担心 Ramda 神奇的柯里化虽然经常有用,但偶尔也会导致这样的问题。如果我们推出 1.0 版,我将尝试说服 Ramda 团队的其他成员在下一个版本中切换到简单柯里化。或者也许那是完全不同的图书馆。
Ramda 也迫切需要处理其错误消息。
总有一天。