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