7

ERLANGの場合:F1を入力として受け取る関数f()があると仮定します。ここで、F1は関数です。F1の入力パラメータの数を知る方法はありますか?

どういうわけか解決策があると思いますが、よくわかりません。例えば:

 -module(high).
 -compile(export_all).

 f1() -> 1.
 f2(X) -> X. 
 f3(X, Y) -> {X,Y}. 

 run(F) -> io:format("F ~p ~n", [F]).

それで、関数run / 1が渡された関数に関する情報[主に渡された関数の入力パラメーターの数]を知る方法はありますか?

注:これは理論上の質問であることに注意してください。注:オープンソースで利用可能なapply(fun、[arguments])のコードです..これは私が推測するかもしれません。

4

2 に答える 2

14

erlang:fun_info(Fun、arity)。

例えば

F = fun(A,B) -> A+B end.
#Fun<erl_eval.12.111823515>
3> erlang:fun_info(F,arity).
{arity,2}
于 2012-04-06T19:32:46.923 に答える
1

module_info/1モジュールに関する情報を取得するために使用できます。

module_info/1

module_info(Key)はアトムである呼び出しKeyは、モジュールに関する単一の情報を返します。

次の値が許可されていKeyます:

..。

exports モジュール内のすべてのエクスポートされた関数を含む{Name、Arity}タプルのリストを返します。

functions モジュール内のすべての関数を含む{Name、Arity}タプルのリストを返します。

http://erlang.org/doc/reference_manual/modules.html


run(F) -> find_value(F,module_info(exports)).

find_value(Key, List) ->
    case lists:keyfind(Key, 1, List) of
        {Key, Result} -> {Key,Result};
        false -> io:format("There is no function called ~w.~n", [Key])
    end.
于 2016-04-25T12:47:10.407 に答える