变量在Erlang中绑定一次

变量在Erlang中绑定一次,erlang,erlang-shell,Erlang,Erlang Shell,编辑:我更改了这个问题的标题,因为考虑到我犯的n00b错误,它没有用。其余部分不变,并作为一个警示故事 我使用的是Erlang OTP版本17.4。考虑下面的Erlang shell会话,我在实验中使用代码> TrrpExeX进程标志,如解释的 首先,我设置trap\u exit标志,将链接进程中的退出信号转换为常规消息: Eshell V6.2 (abort with ^G) 1> process_flag(trap_exit, true). false 然后我生成一个链接进程,并通

编辑:我更改了这个问题的标题,因为考虑到我犯的n00b错误,它没有用。其余部分不变,并作为一个警示故事

我使用的是Erlang OTP版本17.4。考虑下面的Erlang shell会话,我在实验中使用<>代码> TrrpExeX进程标志,如

解释的 首先,我设置
trap\u exit
标志,将链接进程中的退出信号转换为常规消息:

Eshell V6.2  (abort with ^G)
1> process_flag(trap_exit, true).
false
然后我生成一个链接进程,并通过调用
exit/2
立即终止它:

2> exit(spawn_link(fun() -> timer:sleep(50000) end), kill).
true
然后我阅读了转换后的退出消息:

3> receive X -> X end.
{'EXIT',<0.61.0>,killed}
5> receive X -> X end.
并尝试读取转换后的退出消息:

3> receive X -> X end.
{'EXIT',<0.61.0>,killed}
5> receive X -> X end.

此时,外壳挂起。我的问题是,为什么在第二次复飞时行为会发生变化,退出消息会出现在哪里

您的第二个
接收X->X结束。
已绑定
X
;它正在尝试接收与您已看到的消息完全匹配的消息。由于pid将不同,因此消息将永远不匹配。所以它挂起,等待一个匹配的


您需要先
f(X)

您的第二个
接收X->X结束。
已经绑定了
X
;它正在尝试接收与您已看到的消息完全匹配的消息。由于pid将不同,因此消息将永远不匹配。所以它挂起,等待一个匹配的


您需要先
f(X)

您的第二个
接收X->X结束。
已经绑定了
X
;它正在尝试接收与您已看到的消息完全匹配的消息。由于pid将不同,因此消息将永远不匹配。所以它挂起,等待一个匹配的


您需要先
f(X)

您的第二个
接收X->X结束。
已经绑定了
X
;它正在尝试接收与您已看到的消息完全匹配的消息。由于pid将不同,因此消息将永远不匹配。所以它挂起,等待一个匹配的


你需要先
f(X)

谢谢,还有“Doh!”。我的n00b状态在那里闪闪发光。:)谢谢,还有“Doh!”。我的n00b状态在那里闪闪发光。:)谢谢,还有“Doh!”。我的n00b状态在那里闪闪发光。:)谢谢,还有“Doh!”。我的n00b状态在那里闪闪发光。:)在shell中,您可以使用flush()打印收到的消息。在shell中,您可以使用flush()打印收到的消息。在shell中,您可以使用flush()打印收到的消息。在shell中,您可以使用flush()打印收到的消息。