【问题标题】:Erlang, badmatch error when assigning list to a recordErlang,将列表分配给记录时出现错误匹配错误
【发布时间】:2014-02-14 12:29:53
【问题描述】:

我正在尝试将列表 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=[]}.

【问题讨论】:

    标签: erlang


    【解决方案1】:

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

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

    将其更改为其他变量

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 2019-12-13
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多