如何调用Enum.map中的模块函数而不会出现"未定义的引用"错误?

Fra*_*itt 18 elixir

我有一个包含单个函数的简单模块:

defmodule Funcs do

  def double(x) do
    x*2
  end

end
Run Code Online (Sandbox Code Playgroud)

当我iex以文件名作为参数开始时,我可以调用该函数:

iex(5)> Funcs.double(3)
6
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用它时Enum.map,我收到一个undefined function错误:

iex(2)> Enum.map([1,2,3,4], Funcs.double)
** (UndefinedFunctionError) undefined function: Funcs.double/0
    Funcs.double()
Run Code Online (Sandbox Code Playgroud)

而如果我只使用类似的匿名函数,一切都按预期工作:

iex(6)> Enum.map([1,2,3,4], fn(x) -> x*2; end)
[2, 4, 6, 8]
Run Code Online (Sandbox Code Playgroud)

如何使用模块函数(不确定这是否是正确的术语)作为Enum.map的参数?

wha*_*ide 28

捕获非匿名函数的语法使用&function/arity.

在你的例子中:

Enum.map([1,2,3,4], &Funcs.double/1)
Run Code Online (Sandbox Code Playgroud)

您可以&特殊表单的文档中阅读有关捕获语法(在Elixir中非常常见)的更多信息.