2011-12-14 12 views
5

Yürütmekte olduğum geçerli işlevin adını bulabilir miyim?Erlang - Çalışma zamanında geçerli fonksiyonun adını nasıl bulabilirim?

foo() -> 
    foo = find_function_name(). 

Eğlenceli find_function_name/0 yazmak mümkün mü? Nasıl yapardınız? Zaten var mı? Function yılında

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

bir atom olarak işlev adı bulacaksınız ve Module olsun: Daha hafif ve de zaman zaman değiştirebilir StackTrace biçimine bağlı değildir

+5

olası yinelenen [? Bir işlevin adını almak nasıl] (http://stackoverflow.com/questions/4915339/how- to-get--name-of-a-fonksiyonu) –

cevap

3

, ben daha çok process_info/2 kullanmayı tercih ediyorum ve Arity da. Bunu işlev olarak yazamazsınız çünkü bu işlevi yalnızca geçerli olarak döndürür. atom olarak aktüel işlev adını veren bir makro görünebilir gibi:

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

foo() -> 
    foo = ?current_function_name(). 
İlgili konular