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]).
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]).
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
、しかし、渡したい追加の値がない限り、その理由はありません。
他の2つの答えは実際に質問に答えます。それらに追加したいだけです。
アトムを渡して、その名前で関数を呼び出せるようにしたいと考えています。これは、ローカル関数では不可能です。ただし、エクスポートされた関数については非常に可能です。
したがって、次のようなことができます (私の唯一の変更は、「?MODULE:」を追加し、「debug」を「C」に変更することです):
-module(anony).
-export([test/0, test1/0]).
test1() -> "hello".
test() ->
C = fun(F) -> Val = ?MODULE:F(), io:format("~p ", [Val]) end,
lists:foreach(C, [test1]).
まず、C
変数はまったく使用されていません。次に、変数を : でラップする必要がありtest1
ますfun/end
。
-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]).