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