Инструкция Erlang throw не работает в обработчике функции - PullRequest
0 голосов
/ 20 июля 2011

Я пытаюсь выбросить ошибку внутри обработчика функции и перехватить ее снаружи. Работает нормально, если дескриптор создан локально. Если я экспортирую функцию и получу доступ к ней по имени модуля, я получу {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

Я абсолютно не понимаю, почему это происходит. У кого-нибудь есть идея?

1 Ответ

0 голосов
/ 21 июля 2011

Это ошибка Eclipse IDE Erlide.В режиме отладки он заменяет все дескрипторы функций.В этом случае он делает что-то не так.Я разместил ошибку под: http://sourceforge.net/tracker/?func=detail&aid=3373292&group_id=58889&atid=489191

...