如何在 Enum.map 中调用模块函数而不出现 "Undefined reference" 错误?
How can I call a module function inside Enum.map without getting an "Undefined reference" error?
我有一个包含单一功能的简单模块:
defmodule Funcs do
def double(x) do
x*2
end
end
当我以文件名作为参数启动 iex
时,我可以很好地调用该函数:
iex(5)> Funcs.double(3)
6
但是当我尝试在 Enum.map
中使用它时,出现 undefined function
错误:
iex(2)> Enum.map([1,2,3,4], Funcs.double)
** (UndefinedFunctionError) undefined function: Funcs.double/0
Funcs.double()
而如果我只使用类似的匿名函数,一切都会按预期进行:
iex(6)> Enum.map([1,2,3,4], fn(x) -> x*2; end)
[2, 4, 6, 8]
如何使用模块函数(不确定这是否是正确的术语)作为 Enum.map 的参数?
捕获非匿名函数的语法使用&function/arity
.
在你的例子中:
Enum.map([1,2,3,4], &Funcs.double/1)
中阅读有关捕获语法(这在 Elixir 中很常见)的更多信息
我有一个包含单一功能的简单模块:
defmodule Funcs do
def double(x) do
x*2
end
end
当我以文件名作为参数启动 iex
时,我可以很好地调用该函数:
iex(5)> Funcs.double(3)
6
但是当我尝试在 Enum.map
中使用它时,出现 undefined function
错误:
iex(2)> Enum.map([1,2,3,4], Funcs.double)
** (UndefinedFunctionError) undefined function: Funcs.double/0
Funcs.double()
而如果我只使用类似的匿名函数,一切都会按预期进行:
iex(6)> Enum.map([1,2,3,4], fn(x) -> x*2; end)
[2, 4, 6, 8]
如何使用模块函数(不确定这是否是正确的术语)作为 Enum.map 的参数?
捕获非匿名函数的语法使用&function/arity
.
在你的例子中:
Enum.map([1,2,3,4], &Funcs.double/1)
中阅读有关捕获语法(这在 Elixir 中很常见)的更多信息