2

我是二郎的新手。现在,我正在学习流程的链接。在接下来的实验之后我有点困惑:

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.

???

4

1 回答 1

3

哦...我忘记了变量 Pid 已经与值绑定(在调用第一个 try-catch 块之后)。所以我需要的只是解除绑定变量 Pid。调用口译员f(Pid).- 解决了我的问题

于 2012-07-18T13:38:31.477 回答