1

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]).
4

3 に答える 3

7

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、しかし、渡したい追加の値がない限り、その理由はありません。

于 2010-07-16T10:16:03.843 に答える
3

他の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]).
于 2010-07-16T16:22:42.753 に答える
2

まず、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]).
于 2010-07-16T09:08:32.107 に答える