2014-02-13 30 views
0

我試圖將列表ConnectedAtoms分配給新創建的server_st記錄內的connectedatoms列表。但是我遇到了一個不匹配的錯誤。Erlang,將列表分配給記錄時出現不匹配錯誤

-module(server). 
-export([loop/2, initial_state/1]). 

-include_lib("./defs.hrl"). 


loop(St,{tryConnect,Atom}) -> 
    IsConnected = funcs:hasElem(St#server_st.connectedatoms,Atom), 
    if 
     IsConnected==true -> 
      {'EXIT',user_already_connected}; 
     IsConnected==false -> 
      ConnectedAtoms = St#server_st.connectedatoms ++ [Atom], 
      St = #server_st{servername=St#server_st.servername,connectedatoms=ConnectedAtoms}, 
      {"Connected!",St} 
    end; 

loop(St, _Msg) -> 
    io:format("Server got message.~n"), 
    {ok, St}. 



initial_state(_Server) -> 
    #server_st{servername=_Server,connectedatoms=[]}. 

回答

5

你得到不好的匹配誤差與您試圖重新分配的值聖二郎既然是一個函數式編程語言,一旦你分配一個值,你不能改變值的變量。一旦變量綁定到某個值,下一個'='運算符只匹配該模式。

St = #server_st{servername=St#server_st.servername,connectedatoms=ConnectedAtoms}, 

將其更改爲其他變量

StConnected = #server_st{servername=St#server_st.servername,connectedatoms=ConnectedAtoms},