0

このコードを Erlang コンソールで実行すると

Pid = spawn(fun() -> "foo" end),link(Pid),receive X -> X end.

次のエラーが表示されます。

** exception error: no such process or port
 in function  link/1
    called as link(<0.71.0>)```
4

1 に答える 1

6

これは、生成したプロセスが非常に迅速に終了するために発生します。文字列を「返す」だけであり (新しいプロセスの呼び出しスタックの最上位関数であるため、戻り値はどこにも行きません)、終了する可能性が非常に高くなります。エミュレーターがlink呼び出しに到達する前に。

終了する前にプロセスをスリープ状態にすることで、成功する可能性を高めることができます。

2> Pid = spawn(fun() -> timer:sleep(1000), "foo" end),link(Pid).
true

ただしreceive、生成されたプロセスはメッセージを送信しないため、この例の式は何も受信しない可能性が高いことに注意してください。また、プロセスが正常に終了するため、リンクもメッセージを生成しません。出口をトラップしないでください。次のようなことをしたいかもしれません:

Parent = self(),
spawn(fun() -> Parent ! "foo" end),
receive X -> X end.

それは を返します"foo"

于 2014-07-04T22:23:11.243 に答える