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

标签 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)

谢谢!

最佳答案

您无法将 arity 为 2 的函数传递给 Enum.map,因为 Enum.map 使用列表中的每个元素作为参数调用您的函数。如果您使用另一个函数,例如 Enum.reduce,那么它需要一个 arity 为 2 的函数。

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

Enum.map(["FOO", "BAR", "BAZ"], fn(x) -> String.downcase(x) end)
# String.downcase("FOO")
# String.downcase("BAR")
# String.downcase("BAZ")

在重复的示例中,您尝试使用单个参数(字符串“FOO”)调用String.duplicate/2

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

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)

关于function - 如何在 Elixir 中将 arity 2 的函数作为 Enum.map 的参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33696253/

相关文章:

mysql - 如何使用 MySQL Workbench 创建函数?

java - 枚举与其他枚举作为类型

java - 打印枚举菜单

Scala 不处理 ':' 函数的非显式类型闭包

haskell - 种类有什么用吗?

c - 将 argv 字符串传递给 C 中的函数

python - 如何修复 "NameError: name method-name is not defined"?

function - 在不调用 typescript 中的函数的情况下获取泛型函数的类型

java - Jackson - 使用整数字段序列化/反序列化枚举

clojure - Clojure 中的简单猜谜游戏无法正常运行