2011-12-14 9 views
5

Czy mogę znaleźć nazwę bieżącej funkcji, w której się znajduję w czasie wykonywania?Erlang - Jak znaleźć nazwę bieżącej funkcji w czasie wykonywania?

foo() -> 
    foo = find_function_name(). 

Czy można napisać zabawę nazwa_funkcji_współrzędu/0? Jak byś to zrobił? Czy to już istnieje?

+5

możliwe duplikat [? Jak uzyskać nazwę funkcji] (http://stackoverflow.com/questions/4915339/how- to-get-the-name-of-a-function) –

Odpowiedz

3

Więcej lekki, a także nie w zależności od formatu StackTrace który może zmieniać od czasu do czasu, wolałbym użyć process_info/2:

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

W Function znajdziesz nazwę funkcji jako atomu i masz Module a także Arity. Nie można zapisać tego jako funkcji, ponieważ po prostu zwróciłby tę funkcję jako bieżącą. Makro, który daje obecną nazwę funkcji jak atom mógłby wyglądać następująco:

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

foo() -> 
    foo = ?current_function_name(). 
Powiązane problemy