Erlang - 如何在运行时找到当前函数的名称?

时间:2011-12-14 13:26:50

标签: function erlang

我可以在运行时找到当前函数的名称吗?

foo() ->
  foo = find_function_name().

是否可以编写有趣的find_function_name / 0? 你会怎么做?它已经存在吗?

1 个答案:

答案 0 :(得分:3)

更轻量级,也不依赖于偶尔会改变的堆栈跟踪格式,我宁愿使用process_info/2

{_, {Module, Function, Arity}} = process_info(self(), current_function)

Function中,您会发现函数名称为原子,您还可以获得ModuleArity。你不能把它写成函数,因为它只会将此函数作为当前函数返回。一个宏,它给你当前的函数名称作为原子可能看起来像:

-define(current_function_name(), 
            element(2, element(2, process_info(self(), current_function)))).

foo() ->
    foo = ?current_function_name().