2015-02-07 81 views
0

我正在嘗試編寫一個函數,它將使進程在接收循環中等待,並在輸入上進行模式匹配以創建更多進程。在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> 

我試圖做的是運行使用該masterNode變量激活模式匹配,並通過另一個模塊(userNode)創建多個過程聽命令。像這樣:

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

我是新來的Erlang,所以我可能會以這種錯誤的方式進行。任何幫助?

回答

6

我也是新來的Erlang,但或許也可能是這樣簡單:

mn不是一個變量,它是一個原子。因此,當你做atom = statement你正在做一個比較而不是任務。嘗試將它重命名爲Mn或Pid(在大多數教程中使用它)。

+0

這就是問題!謝謝! – user2276280 2015-02-08 00:00:47