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

标签 erlang

我正在尝试将 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/

相关文章:

erlang - 如何打包 Erlang 应用程序?

Erlang - 在外部文件中搜索特定字符串,如果不存在则追加文件

erlang - ets 是否提供了一种一次性进行更新和读取的方法——比如增量操作?

Erlang 函数已经用保护子句定义

haskell - Haskell 的 Erlang 等价物 where/partial/lambda

erlang - 与 simple_one_for_one 主管一起开始一个 child

f# - Erlang 替代 f# 序列

erlang - 删除列表元素只出现一次

erlang - 如何引用正则表达式字符串中的所有元字符

erlang - "-spec"在 Erlang 语法中有什么作用?使用或不使用 -spec 创建函数有什么区别