2011-12-14 29 views
5

¿Puedo encontrar el nombre de la función actual en la que estoy en el tiempo de ejecución?Erlang - ¿Cómo encontrar el nombre de la función actual en tiempo de ejecución?

foo() -> 
    foo = find_function_name(). 

¿Es posible escribir la diversión find_function_name/0? ¿Cómo lo harías? ¿Ya existe?

+5

posible duplicado de [? ¿Cómo obtener el nombre de una función] (http://stackoverflow.com/questions/4915339/how- para-obtener-el-nombre-de-una-función) –

Respuesta

3

Más ligero y tampoco en función del formato StackTrace que puede cambiar de vez en cuando, prefiero usar process_info/2:

{_, {Module, Function, Arity}} = process_info(self(), current_function) 

En Function se encuentra el nombre de la función como un átomo y se obtiene el Module y el Arity también. No puede escribir esto como función porque simplemente devolvería esta función como actual. Una macro que le da el nombre de la función actual como átomo podría ser:

-define(current_function_name(), 
      element(2, element(2, process_info(self(), current_function)))). 

foo() -> 
    foo = ?current_function_name(). 
Cuestiones relacionadas