在 Erlang 中监听消息
Listening for messages in Erlang
我正在尝试编写一个函数,使进程在接收循环中等待,并根据输入进行模式匹配以创建更多进程。
-module(masterNode).
%% ====================================================================
%% API functions
%% ====================================================================
-export([listen/0]).
%% ====================================================================
%% Internal functions
%% ====================================================================
listen() ->
receive
{userNodeName, createNode} ->
spawn(userNode, listen, [userNodeName]),
io:format("User Node Created!~n"),
listen();
{_, createNode} ->
spawn(userNode, listen, ["Anonymous"]),
io:format("Anonymous User Node Created!~n"),
listen();
_ ->
io:format("Invalid syntax!.~n")
end.
当我尝试从命令行将 masterNode 生成到变量中时,出现此错误:
5> mn = spawn(masterNode, listen, []).
** exception error: no match of right hand side value <0.44.0>
但是,如果我不尝试将其存储到变量中,我没有问题:
6> spawn(masterNode, listen, []).
<0.47.0>
我想做的是 运行 listen 命令使用这个 masterNode 变量来激活模式匹配并通过另一个模块(userNode)创建更多进程。像这样:
mn ! {userNode1, createNode}. %Create a userNode process called userNode1
我是 Erlang 的新手,所以我可能会以错误的方式解决这个问题。有帮助吗?
我也是 Erlang 新手,但也许可以这么简单:
mn
不是一个变量,它是一个原子。因此,当您执行 atom = statement
时,您是在进行比较而不是赋值。尝试将其重命名为 Mn 或 Pid(在大多数教程中使用)。
我正在尝试编写一个函数,使进程在接收循环中等待,并根据输入进行模式匹配以创建更多进程。
-module(masterNode).
%% ====================================================================
%% API functions
%% ====================================================================
-export([listen/0]).
%% ====================================================================
%% Internal functions
%% ====================================================================
listen() ->
receive
{userNodeName, createNode} ->
spawn(userNode, listen, [userNodeName]),
io:format("User Node Created!~n"),
listen();
{_, createNode} ->
spawn(userNode, listen, ["Anonymous"]),
io:format("Anonymous User Node Created!~n"),
listen();
_ ->
io:format("Invalid syntax!.~n")
end.
当我尝试从命令行将 masterNode 生成到变量中时,出现此错误:
5> mn = spawn(masterNode, listen, []).
** exception error: no match of right hand side value <0.44.0>
但是,如果我不尝试将其存储到变量中,我没有问题:
6> spawn(masterNode, listen, []).
<0.47.0>
我想做的是 运行 listen 命令使用这个 masterNode 变量来激活模式匹配并通过另一个模块(userNode)创建更多进程。像这样:
mn ! {userNode1, createNode}. %Create a userNode process called userNode1
我是 Erlang 的新手,所以我可能会以错误的方式解决这个问题。有帮助吗?
我也是 Erlang 新手,但也许可以这么简单:
mn
不是一个变量,它是一个原子。因此,当您执行 atom = statement
时,您是在进行比较而不是赋值。尝试将其重命名为 Mn 或 Pid(在大多数教程中使用)。