Я пытаюсь выбросить ошибку внутри обработчика функции и перехватить ее снаружи. Работает нормально, если дескриптор создан локально. Если я экспортирую функцию и получу доступ к ней по имени модуля, я получу {error, badarg}.
-module(mymodule).
-export([myfun/1]).
myfun(Any) -> throw(Any).
mytestfun1() ->
try
FunHandler=fun myfun/1,
FunHandler("myerr")
catch
W:E -> {W, E}
end.
% returns {throw,"myerr"} as it should
mytestfun2() ->
try
FunHandler=fun mymodule:myfun/1,
FunHandler("myerr")
catch
W:E -> {W, E}
end.
% returns {error,badarg} instead
Я абсолютно не понимаю, почему это происходит. У кого-нибудь есть идея?