我正在尝试将 ConnectedAtoms 列表分配给新创建的 server_st 记录中的 connectedatoms 列表。但是我得到了一个不匹配的错误。
-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 是一种函数式编程语言,一旦您将值分配给变量,您就无法更改该值。一旦变量绑定(bind)到某个值,下一个“=”运算符只匹配模式。
St = #server_st{servername=St#server_st.servername,connectedatoms=ConnectedAtoms},
将其更改为其他变量
StConnected = #server_st{servername=St#server_st.servername,connectedatoms=ConnectedAtoms},
关于Erlang,将列表分配给记录时出现不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21767204/