Elixir 中是否有标准的 curry() 函数?

Is there standard curry() function in Elixir?

我想部分应用一个函数。在 Elixir 中是否有标准简洁的方式进行柯里化?

我知道我可以做这样的事情:

new_func = fn(arg2, arg3) -> my_func(constant, arg2, arg3) end

new_func2 = fn -> my_func2(constant) end

不过长得丑

您可以使用捕获 & 运算符稍微清理一下:

plus2 = &Kernel.+(2, &1)
plus2.(4)
6

注意 plus2 和括号

之间的点 .

因为这是

的一种语法糖
plus2 = fn(right) -> Kernel.+(2, right) end

所有相同的规则都适用。就像您必须为您 "currying" 的函数提供所有参数一样,您可以按任何顺序放置位置参数。

Docs on the & operator

我是这样找到的。

multiply = fn fac -> fn num -> fac*num end end

multiply.(2).(8)

double = multiply.(2)
double.(6)

您还可以执行以下操作。虽然看起来只有最后一个函数可以使用捕获语法,因为使用嵌套捕获会抛出语法错误。

multiply = fn fac -> &(fac*&1) end