我想部分应用一个功能。是否有标准的简洁方法在Elixir中进行任何类型的currying?
我知道我可以做这样的事情:
new_func = fn(arg2, arg3) -> my_func(constant, arg2, arg3) end
new_func2 = fn -> my_func2(constant) end
但它看起来很难看。
答案 0 :(得分:6)
您可以使用捕获&
运算符进行清理:
plus2 = &Kernel.+(2, &1)
plus2.(4)
6
注意加号2和它的parens
之间的点.
因为这是
的语法糖plus2 = fn(right) -> Kernel.+(2, right) end
适用所有相同的规则。就像你必须提供函数的所有参数一样,你可以" currying"并且您可以按任何顺序放置位置参数。
文档:http://elixir-lang.org/docs/stable/elixir/Kernel.SpecialForms.html#&/1