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

Bang operator not working for distributed node

我正在尝试 运行 向分布式 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}

我尝试使用不带 `` 的 node 名称 dan@127.0.0.1 无济于事。
为什么 bang 模式不起作用?

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

1> self() ! {self(), hello}.
{<0.79.0>,hello}
2> flush().
Shell got {<0.79.0>,hello}
ok
3> {} ! {self(), hello}.    
** exception error: bad argument
     in operator  !/2
        called as {} ! {<0.79.0>,hello}

因此,对于您的情况,您需要发送如下消息:

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

更有用的信息Concurrent Programming

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

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