2011-12-14 2 views
5

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

foo() -> 
    foo = find_function_name(). 

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

+5

возможно дубликат [Как получить имя функции] (http://stackoverflow.com/questions/4915339/how- в-получить-имя-в-а-функции) –

ответ

3

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