Erlang Bang运算符不适用于分布式节点

Erlang Bang运算符不适用于分布式节点,erlang,Erlang,我试图对分布式Erlang节点(在本地主机上)运行命令,但出现以下错误: (adi@127.0.0.1)7> A=spawn('dan@127.0.0.1',sv,start,[]). <12104.115.0> (adi@127.0.0.1)13> nodes(). ['dan@127.0.0.1'] (adi@127.0.0.1)17> {'adi@127.0.0.1',A} ! {self(),aa}. ** exception error: bad arg

我试图对分布式Erlang节点(在本地主机上)运行命令,但出现以下错误:

(adi@127.0.0.1)7> A=spawn('dan@127.0.0.1',sv,start,[]).
<12104.115.0>
(adi@127.0.0.1)13> nodes().
['dan@127.0.0.1']
(adi@127.0.0.1)17> {'adi@127.0.0.1',A} ! {self(),aa}. 
** exception error: bad argument
     in operator  !/2
        called as {'adi@127.0.0.1',<12104.115.0>} ! {<0.125.0>,aa}
(adi@127.0.0.1)7> A=产卵('dan@127.0.0.1,sv,start,[])。
(adi@127.0.0.1)13> 节点()。
['dan@127.0.0.1']
(adi@127.0.0.1)17> {'adi@127.0.0.1'啊}!{self(),aa}。
**异常错误:参数错误
接线员/2.
称为{'adi@127.0.0.1',} ! {,aa}
我尝试使用
节点
名称
dan@127.0.0.1
没有``无效。

为什么bang模式不起作用?

这是正确的错误,您不能向元组发送消息,只能向某些进程发送消息:

1>self()!{self(),你好}。
{,你好}
2> 刷新()。
Shell收到{,你好}
好啊
3> {} ! {self(),你好}。
**异常错误:参数错误
接线员/2.
叫做{}!{,你好}
因此,对于您的情况,您需要发送如下信息:

1>A=spawn('dan@127.0.0.1,sv,start,[])。
2> A!{self(),aa}。

更有用的信息。

如果您在另一个节点上有一个进程id,则在向id发送消息时不需要指定节点名称,因为pid已经包含节点名称。所以试试这个:

A=spawn('dan@127.0.0.1',sv,start,[]).
A ! {self(),aa}.

我在想,为了对另一个节点使用
bang
操作符,您需要提供
{nodename,pid}
,但在我的例子中,
spawn/4
已经提供了所有信息,以便向其他节点发送消息。