Erlang throw 语句在函数处理程序中不起作用
我试图在函数处理程序内部抛出错误并在外部捕获它。如果句柄是在本地创建的,则效果很好。如果我导出该函数并通过其模块名称访问它,我会收到一个 {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
我完全不明白为什么会发生这种情况。有人有主意吗?
I am trying to throw an error inside a function handler and catch it outside. It works fine if the handle is created localy. If I export the function and access it by its module name I get an {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
I absolutely do not understand why this happens. Anybody got an idea?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是 Eclipse IDE Erlide 的一个错误。在调试模式下,它会替换所有函数句柄。在这种情况下,它做了一些错误的事情。
我将错误发布在:
http://sourceforge.net/tracker/?func=detail&aid=3373292&group_id=58889&atid=489191
This is a bug of the Eclipse IDE Erlide. In its debug mode it replaces all function handles. In this case it does something wrong.
I posted the Bug under:
http://sourceforge.net/tracker/?func=detail&aid=3373292&group_id=58889&atid=489191