2

私は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 を抽出できずに失敗する理由がわかりません

ありがとう

PS

簡単に言うと、次のコードがインタープリター プロセスを中断する理由 (** 例外エラー: <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 に答える