我可以在运行时找到当前函数的名称吗?
foo() ->
foo = find_function_name().
是否可以编写有趣的find_function_name / 0? 你会怎么做?它已经存在吗?
答案 0 :(得分:3)
更轻量级,也不依赖于偶尔会改变的堆栈跟踪格式,我宁愿使用process_info/2
:
{_, {Module, Function, Arity}} = process_info(self(), current_function)
在Function
中,您会发现函数名称为原子,您还可以获得Module
和Arity
。你不能把它写成函数,因为它只会将此函数作为当前函数返回。一个宏,它给你当前的函数名称作为原子可能看起来像:
-define(current_function_name(),
element(2, element(2, process_info(self(), current_function)))).
foo() ->
foo = ?current_function_name().