Не так давно наткнулся на одну интересную возможность в Erlang. Если вместо названия модуля при вызове функции передать кортеж, где первый элемент — название модуля, то будет вызвана функция
арностью на единицу больше вызываемой и последним аргументом будет тот самый кортеж.
Пример:
-module(my_module).
-export([test/2]).
test(Arg1,{?MODULE,Arg2}) ->
io:format("Arg1:~p~nArg2:~p~n",[Arg1,Arg2]).
Можно вызвать как:
my_module:test(1,{my_module,2}).
или так
{my_module,2}:test(1).