Erlang throw语句不在函数处理程序中工作

时间:2011-07-20 18:32:20

标签: erlang try-catch handler

我试图在函数处理程序中抛出一个错误并将其捕获到外部。如果手柄是在localy创建的,它可以正常工作。如果我导出该函数并通过其模块名称访问它,我会得到{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 :(得分:0)

这是Eclipse IDE Erlide的错误。在其调试模式下,它将替换所有函数句柄。在这种情况下,它做错了。 我在下面发布了Bug: http://sourceforge.net/tracker/?func=detail&aid=3373292&group_id=58889&atid=489191