Erlang Bang运算符不适用于分布式节点
我试图对分布式Erlang节点(在本地主机上)运行命令,但出现以下错误: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
(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
已经提供了所有信息,以便向其他节点发送消息。