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