7

在 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有没有办法知道传递函数的信息[主要是传递函数的输入参数个数]。

注意:请注意,这是一个理论问题。注意:apply(fun,[arguments]) 的代码是否在开源中可用.. 我猜这可能会帮助我。

4

2 回答 2

14

二郎:fun_info(乐趣,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

callmodule_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 回答