知道传递函数的参数个数(erlang)

时间:2012-04-06 19:01:30

标签: erlang

在ERLANG中:假设我们有一个函数f(),它将F1作为输入,其中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知道有关传递函数的信息[主要是传递函数的输入参数数量]。

注意:请注意这是一个理论问题。 注意:应用程序的代码(有趣的,[参数])在开源中可用..这可能是我猜的。

2 个答案:

答案 0 :(得分:12)

二郎:fun_info(娱乐,元数)

例如

F = fun(A,B) -> A+B end.
#Fun<erl_eval.12.111823515>
3> erlang:fun_info(F,arity).
{arity,2}

答案 1 :(得分:0)

您可以使用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.