在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有没有办法知道有关传递函数的信息[主要是传递函数的输入参数的数量]。
注意:请注意,这是一个理论问题。注意:是开源中可用的应用(有趣,[参数])的代码..我想这可能会让我感到震惊。
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}
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.