Erlang,将列表分配给记录时出现错误匹配

Erlang,将列表分配给记录时出现错误匹配,erlang,Erlang,我正在尝试将列表ConnectedToms分配给新创建的服务器st记录中的列表ConnectedToms。但是我犯了一个错误 -module(server). -export([loop/2, initial_state/1]). -include_lib("./defs.hrl"). loop(St,{tryConnect,Atom}) -> IsConnected = funcs:hasElem(St#server_st.connectedatoms,Atom),

我正在尝试将列表ConnectedToms分配给新创建的服务器st记录中的列表ConnectedToms。但是我犯了一个错误

-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=[]}.

当您试图将值重新分配给St时,会出现错误匹配错误。因为Erlang是一种函数式编程语言,一旦将值分配给变量,就无法更改该值。变量绑定到某个值后,下一个“=”运算符仅与模式匹配

St = #server_st{servername=St#server_st.servername,connectedatoms=ConnectedAtoms},
将其更改为其他变量

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