我是二郎的新手。现在,我正在学习流程的链接。在接下来的实验之后我有点困惑:
3> process_flag( trap_exit, true ).
false
4> try 1+1, spawn_link( unknown_module, unknown_function, [] ) of
4> Pid -> Pid
4> catch
4> _:_ -> err
4> end.
<0.37.0>
5>
=ERROR REPORT==== 18-Jul-2012::16:01:32 ===
Error in process <0.37.0> with exit value: {undef,[{unknown_module,unknown_function,[],[]}]}
5>
5> flush().
Shell got {'EXIT',<0.37.0>,{undef,[{unknown_module,unknown_function,[],[]}]}}
ok
正如我所料,我从创建的进程中获得了 Pid,并且该进程失败了 - 因为未知的模块和功能 - 所以我收到了关于它的消息。
之后我尝试了下一个:
6> try spawn_link( unknown_module, unknown_function, [] ) of
6> Pid -> Pid
6> catch
6> _:_ -> err
6> end.
** exception error: no try clause matching <0.40.0>
而且我不明白为什么解释器进程无法提取 Pid 并失败
谢谢
附言
简而言之:为什么下一个代码会破坏解释器进程(** 异常错误:没有匹配 <0.40.0> 的 try 子句)
try spawn_link( unknown_module, unknown_function, [] ) of
Pid -> Pid
catch
_:_ -> err
end.
以及为什么这段代码不会破坏解释器进程(返回 <0.37.0>)
try 1+1, spawn_link( unknown_module, unknown_function, [] ) of
Pid -> Pid
catch
_:_ -> err
end.
???