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" 的函数提供所有参数一样,您可以按任何顺序放置位置参数。
我是这样找到的。
multiply = fn fac -> fn num -> fac*num end end
multiply.(2).(8)
double = multiply.(2)
double.(6)
您还可以执行以下操作。虽然看起来只有最后一个函数可以使用捕获语法,因为使用嵌套捕获会抛出语法错误。
multiply = fn fac -> &(fac*&1) end
我想部分应用一个函数。在 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" 的函数提供所有参数一样,您可以按任何顺序放置位置参数。
我是这样找到的。
multiply = fn fac -> fn num -> fac*num end end
multiply.(2).(8)
double = multiply.(2)
double.(6)
您还可以执行以下操作。虽然看起来只有最后一个函数可以使用捕获语法,因为使用嵌套捕获会抛出语法错误。
multiply = fn fac -> &(fac*&1) end