在变量和erlang中"直接"传递的消息

Mat*_*roh 2 erlang pid sendmessage

我在O'Reilly的"软件开发的并行方法"一书中读到了,
在第93页中有一些"消息传递"的例子.

1> Pid = self().
<0.30.0>
2> Pid ! hello.
hello
3> <0.30.0> ! hello.
* 1: syntax error before: '<'
Run Code Online (Sandbox Code Playgroud)

问题是我不明白为什么会出现语法错误,因为当我输入时1> Pid. 我会得到结果<0.30.0>,那么第2行和第3行之间的区别是什么(期望它是变量的事实)?

leg*_*cia 5

Erlang中没有文字进程ID的语法.这样做的原因是它几乎没有意义:每次程序运行时,您想要访问的进程最有可能具有不同的pid.

通常,您将生成一个进程,保存spawn变量的返回值,然后使用该变量与进程交互.

如果你真的想从它的字符串表示中获得一个可用的pid,你可以使用该函数list_to_pid,或者pid从打印的组件中获取一个pid:

list_to_pid("<0.30.0>")
pid(0,30,0)
Run Code Online (Sandbox Code Playgroud)

  • 关于你的最后一句话,我还会添加`pid(0,30,0)`的可能用法. (3认同)