【问题标题】:Listening for messages in Erlang在 Erlang 中监听消息
【发布时间】:2015-04-07 20:44:24
【问题描述】:

我正在尝试编写一个函数,该函数将使进程在接收循环中等待并在输入上进行模式匹配以创建更多进程。

-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>

我要做的是使用这个 masterNode 变量运行listen命令来激活模式匹配并通过另一个模块(userNode)创建更多进程。像这样:

mn ! {userNode1, createNode}. %Create a userNode process called userNode1

我是 Erlang 的新手,所以我可能会以错误的方式处理这个问题。有什么帮助吗?

【问题讨论】:

    标签: erlang distributed-computing


    【解决方案1】:

    我也是 Erlang 的新手,但也许它可以像这样简单:

    mn 不是变量,它是一个原子。因此,当您执行atom = statement 时,您是在进行比较而不是分配。尝试将其重命名为 Mn 或 Pid(在大多数教程中使用)。

    【讨论】:

    • 这就是问题所在!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多