Более легкий, а также не зависящий от формата трассировки стека, который иногда может меняться, я бы предпочел использовать 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().