我试图在函数处理程序中抛出一个错误并将其捕获到外部。如果手柄是在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
我绝对不明白为什么会这样。有人有个主意吗?
答案 0 :(得分:0)
这是Eclipse IDE Erlide的错误。在其调试模式下,它将替换所有函数句柄。在这种情况下,它做错了。 我在下面发布了Bug: http://sourceforge.net/tracker/?func=detail&aid=3373292&group_id=58889&atid=489191