Elixir 使用Enum.reduce,为什么要使用该编译器;错误:未定义函数my_func/0;

Elixir 使用Enum.reduce,为什么要使用该编译器;错误:未定义函数my_func/0;,elixir,reducers,Elixir,Reducers,我的代码如下,我不清楚为什么编译器会抱怨: rle.exs:3: warning: function reducer_fun/2 is unused ** (CompileError) rle.exs:15: undefined function reducer_fun/0 (stdlib) lists.erl:1337: :lists.foreach/2 (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6 应该是 true ->

我的代码如下,我不清楚为什么编译器会抱怨:

rle.exs:3: warning: function reducer_fun/2 is unused ** (CompileError) rle.exs:15: undefined function reducer_fun/0 (stdlib) lists.erl:1337: :lists.foreach/2 (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6 应该是

true -> Enum.concat(Enum.reduce(string, {:no_letter, 0, []}, &reducer_fun/2))
由于
Enum.reduce/3
需要一个
fn
,第三个参数是arity 2,而您的原始代码试图调用名为
reducer\u-fun
的同一模块中没有参数的函数(因此出现错误
undefined function reducer\u-fun/0
),并将返回值传递给
Enum.reduce/3

编辑:此外,字符串不可枚举。您应该首先将字符串传递到
string.to_char\u list
string.codepoints
string.graphemes
,以将其转换为列表。要使用的确切函数取决于您尝试执行的操作

应该是

true -> Enum.concat(Enum.reduce(string, {:no_letter, 0, []}, &reducer_fun/2))
由于
Enum.reduce/3
需要一个
fn
,第三个参数是arity 2,而您的原始代码试图调用名为
reducer\u-fun
的同一模块中没有参数的函数(因此出现错误
undefined function reducer\u-fun/0
),并将返回值传递给
Enum.reduce/3


编辑:此外,字符串不可枚举。您应该首先将字符串传递到
string.to_char\u list
string.codepoints
string.graphemes
,以将其转换为列表。要使用的确切函数取决于您尝试执行的操作。

Odd。。。我以为字符串不可枚举?在iex(
1.3-dev
)中尝试对字符串进行缩减会使我
协议枚举未为“abcd”实现。
您确定fn的arrity为3吗?“我想是2点。”斯蒂芬尼罗兰同意了。在docs()上,我看到reduce/2和reduce/3都有一个arity-2的乐趣。@StephaneRolland对不起,那是个打字错误。已修复。@StephaneRolland啊,字符串不可枚举。您可能希望使用
String.to_char\u list
String.codepoints
String.graphemes
将其转换为列表,具体取决于您尝试执行的操作。奇数。。。我以为字符串不可枚举?在iex(
1.3-dev
)中尝试对字符串进行缩减会使我
协议枚举未为“abcd”实现。
您确定fn的arrity为3吗?“我想是2点。”斯蒂芬尼罗兰同意了。在docs()上,我看到reduce/2和reduce/3都有一个arity-2的乐趣。@StephaneRolland对不起,那是个打字错误。已修复。@StephaneRolland啊,字符串不可枚举。您可能希望使用
String.to_char\u list
String.codepoints
String.graphemes
将其转换为列表,具体取决于您尝试执行的操作。
true -> Enum.concat(Enum.reduce(string, {:no_letter, 0, []}, &reducer_fun/2))