我是Erlang的新手。现在,我正在学习关于流程的链接。 在下一次实验后我有点困惑:
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而失败
由于
P.S。
简而言之:为什么下一个代码会破解解释器进程(**异常错误:没有try子句匹配&lt; 0.40.0&gt;)
try spawn_link( unknown_module, unknown_function, [] ) of
Pid -> Pid
catch
_:_ -> err
end.
为什么这段代码不会破解翻译过程(返回&lt; 0.37.0&gt;)
try 1+1, spawn_link( unknown_module, unknown_function, [] ) of
Pid -> Pid
catch
_:_ -> err
end.
???
答案 0 :(得分:3)
哦......我忘了变量Pid已经绑定了值(在调用第一个try-catch块之后)。
所以我需要的是 - 取消绑定变量Pid。
打电话给翻译f(Pid).
- 解决了我的问题