如何检查函数对象是否有效

时间:2012-04-23 10:11:21

标签: erlang

我想检查一个输入参数是否为函数对象。 erlang模块的is_functionfun_info不正常,因为它们不会真正导出该模块的功能。

3 个答案:

答案 0 :(得分:5)

我不确定我是否正确理解了您的问题,但如果您试图了解是否从某个模块导出某个函数,您可以使用erlang:function_exported/3函数:

  

如果模块Module已加载并包含导出,则返回true   功能/功能;否则是假的。

答案 1 :(得分:1)

要知道函数sort/2是否由模块lists导出,是否已加载(请参阅Convert a complex nested hash to an object),您可以使用:

lists:member({sort, 2}, lists:module_info(exports)).

如果您不介意Arity功能,可以使用:

case lists:keyfind(sort, 1, lists:module_info(exports)) of
    {sort, _} -> true;
    false -> false
end.

答案 2 :(得分:0)

模块:MODULE_INFO(出口)

module_info