Function 如何在Enum.map的Elixir中将arity 2的函数作为参数传递?

Function 如何在Enum.map的Elixir中将arity 2的函数作为参数传递?,function,enums,functional-programming,elixir,arity,Function,Enums,Functional Programming,Elixir,Arity,比如说,我有一些类似于: Enum.map(list, fn(x) -> String.duplicate("a", someValue * x) end) 但是,为了简化代码,我想将String.duplicate/2函数作为参数传递: Enum.map(list, &String.duplicate/2) 我知道您可以为arity 1函数执行此操作: Enum.map(list, &String.downcase/1) 谢谢 不能将一个函数传递给算术数为2

比如说,我有一些类似于:

    Enum.map(list, fn(x) -> String.duplicate("a", someValue * x) end)
但是,为了简化代码,我想将String.duplicate/2函数作为参数传递:

Enum.map(list, &String.duplicate/2)
我知道您可以为arity 1函数执行此操作:

Enum.map(list, &String.downcase/1)

谢谢

不能将一个函数传递给算术数为2的
Enum.map
,因为
Enum.map
使用列表中的每个元素作为参数调用函数。如果使用另一个函数,如
Enum.reduce
,则它需要一个算术数为2的函数

这是使用列表中的每个项目调用
String.downcase/1
函数的示例:

Enum.map(["FOO", "BAR", "BAZ"], fn(x) -> String.downcase(x) end)
# String.downcase("FOO")
# String.downcase("BAR")
# String.downcase("BAZ")
在使用duplicate的示例中,您试图用一个参数(字符串“FOO”)调用
String.duplicate/2

您可以使用捕获语法创建函数(这是定义您提供的函数的简写方式):

您还可以在模块中定义只需要一个参数的命名函数,例如:

Enum.map([1, 2, 3], &duplicate_foo/1)

def duplicate_foo(times), do: String.duplicate("a", times)

小的添加:在第二个示例中,可以省略一级括号,如下所示:
Enum.map([1,2,3],&String.duplicate(“a”,&1))
Enum.map([1, 2, 3], &duplicate_foo/1)

def duplicate_foo(times), do: String.duplicate("a", times)