Ответ 1
Erlang 19.0 +
Используйте макрос ?FUNCTION_NAME
, чтобы получить имя текущей функции как атома, и ?FUNCTION_ARITY
, чтобы получить arty как целое число.
Пример:
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
, он намного медленнее, поскольку он оценивается во время выполнения.