Эрланг 19,0 +
Используйте макрос ?FUNCTION_NAME
, чтобы получить имя текущей функции в качестве атома, и ?FUNCTION_ARITY
, чтобы получить целое число в виде целого числа.
Пример:
main()->
myFunction().
myFunction()->
io:write("I am ~p !",[?FUNCTION_NAME]).
Это было реализовано в EEP-0045 .
Старые версии Erlang
В более старых версиях Erlang нет простого способа получить текущее имя функции во время компиляции. Однако вы можете получить его во время выполнения:
{current_function, {M, F, A}} = process_info(self(), current_function)
Где A
- арность (количество аргументов), а не фактические аргументы. Первый аргумент process_info/2
- это идентификатор процесса, который может быть либо текущим процессом (self()
), либо другим процессом. Например:
1> process_info(self(), current_function).
{current_function,{erl_eval,do_apply,5}}
Обратите внимание, что хотя это будет функционально эквивалентно макросу ?FUNCTION_NAME
, он намного медленнее, потому что оценивается во время выполнения.