1

这是 Erlang 中的 2 进程通信程序。

我需要在不同的计算机上运行每个进程。

我需要运行 erl -name ping

在计算机 2 中,其主机名为 linux-2.mydomain

而且,我需要运行

 erl -name pong

在计算机 1 中,其主机名为 linux-1.mydomain

然后,

在计算机 1 上,我运行:

  tut17:start_pong().

在计算机 2 上,我运行:

 tut17:start_ping(pong@linux-1)

但是,我得到了错误:

  • 异常错误:算术表达式中的错误参数 -/2 称为 pong@linux - 1

似乎 Erlang 认为“-”是“linux-1”中的减号运算符。

那么,如何让 Erlang 理解我的命令呢?

非常感谢任何帮助。

代码如下:

 -module(tut17).

 -export([start_ping/1, start_pong/0,  ping/2, pong/0]).

 ping(0, Pong_Node) ->
     {pong, Pong_Node} ! finished,
     io:format("ping finished~n", []);

 ping(N, Pong_Node) ->
     {pong, Pong_Node} ! {ping, self()},
    receive
        pong ->
             io:format("Ping received pong~n", [])
    end,
 ping(N - 1, Pong_Node).

 pong() ->
     receive
         finished ->
              io:format("Pong finished~n", []);

         {ping, Ping_PID} ->
               io:format("Pong received ping~n", []),

               Ping_PID ! pong,
           pong()
  end.

  start_pong() ->
       register(pong, spawn(tut17, pong, [])).

  start_ping(Pong_Node) ->
       spawn(tut17, ping, [3, Pong_Node]).
4

1 回答 1

4

将节点名称放在单引号中:

tut17:start_ping('pong@linux-1')

http://www.erlang.org/doc/reference_manual/data_types.html#id66276

如果原子不是以小写字母开头或包含除字母数字字符、下划线 (_) 或 @ 之外的其他字符,则应将原子括在单引号 (') 中。

于 2012-04-20T06:10:37.240 回答