Erlang-AnonymousOUOS函数

Erlang-AnonymousOUOS函数,erlang,anonymous-function,Erlang,Anonymous Function,如果调用test(),它将不起作用。有人能解释一下吗 -module(anony). -export([test/0, test1/0]). test1() -> "hello". test() -> C = fun(F) -> Val = F(), io:format("~p ", [Val]) end, lists:foreach(debug, [test1]). 首先,C变量根本没有被使用过,其次应该用fun/end来包装test1: -module

如果调用test(),它将不起作用。有人能解释一下吗

-module(anony).

-export([test/0, test1/0]).

test1() -> "hello".

test() ->
   C = fun(F) -> Val = F(), io:format("~p ", [Val]) end, 
   lists:foreach(debug, [test1]).

首先,
C
变量根本没有被使用过,其次应该用
fun/end
来包装
test1

-module(anony).

-export([test/0, test1/0]).

test1() -> "hello".

test() ->
     C = fun(F) -> Val = F(), io:format("~p ", [Val]) end,
     lists:foreach(C, [fun() -> test1() end]).

首先,
C
变量根本没有被使用过,其次应该用
fun/end
来包装
test1

-module(anony).

-export([test/0, test1/0]).

test1() -> "hello".

test() ->
     C = fun(F) -> Val = F(), io:format("~p ", [Val]) end,
     lists:foreach(C, [fun() -> test1() end]).

test1
本身只是一个原子,而不是对本地函数的引用。要创建对函数的引用,请使用下面的fun function/Arity

-module(anony).

-export([test/0, test1/0]).

test1() -> "hello".

test() ->
    C = fun(F) -> Val = F(), io:format("~p ", [Val]) end,
    lists:foreach(C, [fun test1/0]).

您还可以构造一个匿名函数,调用
test1
,如下所示:
fun()->test1()end
,但没有理由这样做,除非您有其他值要传入或类似的内容。

test1
本身只是一个原子,而不是对本地函数的引用。要创建对函数的引用,请使用下面的fun function/Arity

-module(anony).

-export([test/0, test1/0]).

test1() -> "hello".

test() ->
    C = fun(F) -> Val = F(), io:format("~p ", [Val]) end,
    lists:foreach(C, [fun test1/0]).

您还可以构造一个匿名函数,调用
test1
,如下所示:
fun()->test1()end
,但是没有理由这样做,除非您有其他值要传入或类似的内容。

其他两个答案确实回答了这个问题。我只是想补充一下

我希望您能够传递一个atom并使用该名称调用函数。这对于本地功能是不可能的。不过,对于导出的函数来说,这是非常可能的

因此,您可以执行以下操作(我唯一的更改是添加“?模块:”,并将“调试”更改为“C”):


另外两个答案确实回答了这个问题。我只是想补充一下

我希望您能够传递一个atom并使用该名称调用函数。这对于本地功能是不可能的。不过,对于导出的函数来说,这是非常可能的

因此,您可以执行以下操作(我唯一的更改是添加“?模块:”,并将“调试”更改为“C”):


您的
fun()->test1 end
根本不调用
test1
,它只返回atom
test1
。您的
fun()->test1 end
根本不调用
test1
,它只返回atom
test1
。您应该指定预期的结果。虽然我猜你希望它打印“你好”,对吗?你应该指定预期的结果。虽然我猜你想让它打印“你好”,对吧?一个有趣的选择。我想知道它在性能方面与另一个答案(使用fun test1/0进行显式函数引用)相比如何。由于“外部”函数调用,我的解决方案会稍微慢一点。另一方面,他们解决了两个不同的问题。一个有趣的选择。我想知道它在性能方面与另一个答案(使用fun test1/0进行显式函数引用)相比如何。由于“外部”函数调用,我的解决方案会稍微慢一点。另一方面,它们解决了两个不同的问题。