【问题标题】:message passing by variable and "direct" in erlang在erlang中通过变量和“直接”传递消息
【发布时间】:2016-11-03 00:52:29
【问题描述】:

我读过 O'Reilly 的《软件开发的并发方法》一书
并且在第 93 页中有一些“消息传递”的示例。

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

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

【问题讨论】:

  • 我看到了这个问题,但我不是在问如何发送消息,我是在问为什么我不能以两种方式发送它
  • 看看那个问题的third answer

标签: erlang pid sendmessage


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 关于你的最后一句话,我还要添加pid(0,30,0)的可能用法。
    猜你喜欢
    • 2021-08-07
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    相关资源
    最近更新 更多