在 erlang 中通过变量和 "direct" 传递消息

message passing by variable and "direct" in erlang

我读了 O'Reilly 的书 "A Concurrent Approach to Software Development"
在第 93 页中有几个 "Message Passing".

的例子
1> Pid = self().
<0.30.0>
2> Pid ! hello.
hello
3> <0.30.0> ! hello.
* 1: syntax error before: '<'

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

Pid 是一种 Erlang 数据类型,以您看到的格式显示 <0.30.0>。但是当您手动输入时,该显示字符串不会自动转换为 pid 数据类型。

http://erlang.org/doc/reference_manual/data_types.html

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

通常您会生成一个进程,将 spawn 的 return 值保存在一个变量中,然后使用该变量与进程交互。

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

list_to_pid("<0.30.0>")
pid(0,30,0)