Erlang - Как найти имя текущей функции во время выполнения? - PullRequest
5 голосов
/ 14 декабря 2011

Могу ли я найти имя текущей функции, в которой я работаю во время выполнения?

foo() ->
  foo = find_function_name().

Можно ли написать забавную функцию find_function_name / 0?Как бы вы это сделали?Уже существует?

1 Ответ

3 голосов
/ 15 июля 2012

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