Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang 警告:使用运算符'<';没有效果吗?_Erlang_Otp - Fatal编程技术网

Erlang 警告:使用运算符'<';没有效果吗?

Erlang 警告:使用运算符'<';没有效果吗?,erlang,otp,Erlang,Otp,我是erlang新手,正在尝试实现一个简单的函数,如下所示: % * ChatServers is a dictionary of usernames with tuples of the form: % {server, Pid, Reference,LoggedInUsers} get_chat_server([], _) -> undefined; get_chat_server([Key|_], ChatServers) -> {serv

我是erlang新手,正在尝试实现一个简单的函数,如下所示:

% * ChatServers is a dictionary of usernames with tuples of the form:
%   {server, Pid, Reference,LoggedInUsers}
get_chat_server([], _) ->        
    undefined;

get_chat_server([Key|_], ChatServers) ->
    {server, Pid, Reference,LoggedInUsers} = dict:fetch(Key,ChatServers),
    LoggedInUsers < 100,
    {server, Pid, Reference,LoggedInUsers};

get_chat_server([_|T], ChatServers) ->        
    get_chat_server(T, ChatServers).
%*ChatServers是一个用户名字典,其元组形式如下:
%{server,Pid,Reference,LoggedInUsers}
获取聊天服务器([],\)->
未定义;
获取聊天服务器([Key]chatserver)->
{server,Pid,Reference,LoggedInUsers}=dict:fetch(Key,ChatServers),
LoggedInUsers<100,
{server,Pid,Reference,LoggedInUsers};
获取聊天服务器([[u124; T],聊天服务器)->
获取聊天服务器(T,聊天服务器)。
基本上,我要做的是找到字典中LoggedInUsers数小于100的第一个元组

但是,编译代码后,我会收到以下两个警告:

main\u server\u distributed.erl:63:警告:使用运算符“子句主体(位于
->
右侧的所有内容)不是要满足的条件列表,而只是要计算的表达式的逗号分隔列表。除最后一个表达式的值外,所有结果值都将被丢弃。因此,子句主体
的布尔值(位于
->
右侧的所有内容)不是要满足的条件列表,而只是要计算的表达式的逗号分隔列表。除最后一个表达式的值外,所有结果值都将被丢弃。因此,

主服务器分布式。erl:66:警告:此子句不能匹配
因为第61行的前一个子句始终匹配

你基本上写了:

get_chat_server(NonEmptyList, ChatServers) ->
    {server, Pid, Reference,LoggedInUsers} = dict:fetch(Key,ChatServers),
    LoggedInUsers < 100,
    {server, Pid, Reference,LoggedInUsers};

get_chat_server(NonEmptyList, ChatServers) ->        
    get_chat_server(T, ChatServers).
将匹配任何内容,而
将匹配任何内容。同样,在模式中:

[Key|_]
[_|T]
将匹配任何内容,
T
将匹配任何内容

对@dsmith的答案进行重复:

-module(my).
-export([get_chat_server/3, get_chat_server_test/0]).

get_chat_server(_MaxLoggedIn, []=_Keys, _ChatServers) ->        
    none;
get_chat_server(MaxLoggedIn, [Key|Keys], ChatServers) ->
    get_chat_server(MaxLoggedIn, Keys, ChatServers, dict:fetch(Key, ChatServers) ).

get_chat_server(MaxLoggedIn, _, _, {_,_,_,LoggedInUsers}=ChatServer) when LoggedInUsers < MaxLoggedIn ->
    ChatServer;
get_chat_server(MaxLoggedIn, [Key|Keys], ChatServers, _ChatServer) ->
    get_chat_server(MaxLoggedIn, Keys, ChatServers, dict:fetch(Key, ChatServers) ).

%---------

get_chat_server_test() ->
    Keys = [a, c],
    ChatServers = [
         {a, {server, a, a_, 200}},
         {b, {server, b, b_, 100}},
         {c, {server, c, c_, 30}}
    ],  
    ChatServerDict = dict:from_list(ChatServers),

    none = get_chat_server(10, [], ChatServerDict),
    {server, c, c_, 30} = get_chat_server(50, Keys, ChatServerDict),
    {server, c, c_, 30} = get_chat_server(150, Keys, ChatServerDict),
    PossibleResults = sets:from_list([{server,a,a_, 200},{server,c,c_,30}]),
    true = sets:is_element(
             get_chat_server(250, Keys, ChatServerDict),
             PossibleResults
           ),
    all_tests_passed.      
-模块(my)。
-导出([获取聊天服务器/3,获取聊天服务器测试/0])。
获取聊天服务器(\u MaxLoggedIn,[]=\u密钥,\u聊天服务器)->
没有一个
获取聊天服务器(MaxLoggedIn,[Key | Key],聊天服务器)->
获取聊天服务器(MaxLoggedIn,Key,chatserver,dict:fetch(Key,chatserver))。
当LoggedInUsers
聊天服务器;
获取聊天服务器(MaxLoggedIn、[Key | Key]、聊天服务器、\u聊天服务器)->
获取聊天服务器(MaxLoggedIn,Key,chatserver,dict:fetch(Key,chatserver))。
%---------
获取\u聊天\u服务器\u测试()->
键=[a,c],
聊天服务器=[
{a,{server,a,a{200},
{b,{server,b,b_,100},
{c,{server,c,c_,30}
],  
ChatServerDict=dict:from_列表(ChatServers),
无=获取聊天服务器(10,[],聊天服务器DICT),
{server,c,c_,30}=get_chat_server(50,Keys,ChatServerDict),
{server,c,c_,30}=get_chat_server(150,Keys,ChatServerDict),
PossibleResults=sets:from_list([{server,a,a_u,200},{server,c,c_u,30}]),
true=设置:是_元素(
获取聊天服务器(250,按键,聊天服务器DICT),
可能的结果
),
所有的测试都通过了。
您还可以使用高阶函数,即获取满足您要求的所有聊天服务器的列表:

max_fun(Max, Keys) ->
    fun(Key, {_,_,_,LoggedInUsers}=Server, Acc) ->
            case lists:member(Key, Keys) andalso LoggedInUsers<Max of
                true -> [Server | Acc];
                false -> Acc
            end
    end.
max\u-fun(max,Keys)->
fun(Key,{{{},{,{,{,LoggedInUsers}=Server,Acc)->
案例列表:成员(Key,Key)和日志用户[Server | Acc];
false->Acc
终止
终止
在外壳中:

44>     ChatServers = [
44>          {a, {server, a, a_, 200}},
44>          {b, {server, b, b_, 100}},
44>          {c, {server, c, c_, 30}}
44>     ].
[{a,{server,a,a_,200}},
 {b,{server,b,b_,100}},
 {c,{server,c,c_,30}}]

45> ChatServerDict = dict:from_list(ChatServers).
{dict,3,16,16,8,80,48,
      {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
      {{[],
        [[a|{server,a,a_,200}]],
        [[b|{server,b,b_,100}]],
        [[c|{server,c,c_,30}]],
        [],[],[],[],[],[],[],[],[],[],[],[]}}}

46> Keys = [a,c].
[a,c]

47> MaxLoggedIn = 150.
150

50> F = my:max_fun(MaxLoggedIn, Keys).
#Fun<fl.0.128553666>

51> dict:fold(F, [], ChatServerDict).
[{server,c,c_,30}]
44>聊天服务器=[
44>{a,{server,a,a{200},
44>{b,{server,b,b{100},
44>{c,{server,c,c!30}
44>     ].
[{a,{server,a,a{200},
{b,{server,b,b_,100},
{c,{server,c,c!30}]
45>ChatServerDict=dict:from_列表(ChatServers)。
{dict,3,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
{{[],
[[a |{服务器,a,a |,200}]],
[[b|{server,b,b|u100}],,
[[c{server,c,c{30}],,
[],[],[],[],[],[],[],[],[],[],[],[]}}}
46>键=[a,c]。
[甲,丙]
47>MaxLoggedIn=150。
150
50>F=my:max_-fun(MaxLoggedIn,Keys)。
#乐趣
51>dict:折叠(F,[],ChatServerDict)。
[{服务器,c,c_30;30}]
主服务器分布式。erl:66:警告:此子句不能匹配 因为第61行的前一个子句始终匹配

你基本上写了:

get_chat_server(NonEmptyList, ChatServers) ->
    {server, Pid, Reference,LoggedInUsers} = dict:fetch(Key,ChatServers),
    LoggedInUsers < 100,
    {server, Pid, Reference,LoggedInUsers};

get_chat_server(NonEmptyList, ChatServers) ->        
    get_chat_server(T, ChatServers).
将匹配任何内容,而
将匹配任何内容。同样,在模式中:

[Key|_]
[_|T]
将匹配任何内容,
T
将匹配任何内容

对@dsmith的答案进行重复:

-module(my).
-export([get_chat_server/3, get_chat_server_test/0]).

get_chat_server(_MaxLoggedIn, []=_Keys, _ChatServers) ->        
    none;
get_chat_server(MaxLoggedIn, [Key|Keys], ChatServers) ->
    get_chat_server(MaxLoggedIn, Keys, ChatServers, dict:fetch(Key, ChatServers) ).

get_chat_server(MaxLoggedIn, _, _, {_,_,_,LoggedInUsers}=ChatServer) when LoggedInUsers < MaxLoggedIn ->
    ChatServer;
get_chat_server(MaxLoggedIn, [Key|Keys], ChatServers, _ChatServer) ->
    get_chat_server(MaxLoggedIn, Keys, ChatServers, dict:fetch(Key, ChatServers) ).

%---------

get_chat_server_test() ->
    Keys = [a, c],
    ChatServers = [
         {a, {server, a, a_, 200}},
         {b, {server, b, b_, 100}},
         {c, {server, c, c_, 30}}
    ],  
    ChatServerDict = dict:from_list(ChatServers),

    none = get_chat_server(10, [], ChatServerDict),
    {server, c, c_, 30} = get_chat_server(50, Keys, ChatServerDict),
    {server, c, c_, 30} = get_chat_server(150, Keys, ChatServerDict),
    PossibleResults = sets:from_list([{server,a,a_, 200},{server,c,c_,30}]),
    true = sets:is_element(
             get_chat_server(250, Keys, ChatServerDict),
             PossibleResults
           ),
    all_tests_passed.      
-模块(my)。
-导出([获取聊天服务器/3,获取聊天服务器测试/0])。
获取聊天服务器(\u MaxLoggedIn,[]=\u密钥,\u聊天服务器)->
没有一个
获取聊天服务器(MaxLoggedIn,[Key | Key],聊天服务器)->
获取聊天服务器(MaxLoggedIn,Key,chatserver,dict:fetch(Key,chatserver))。
当LoggedInUsers
聊天服务器;
获取聊天服务器(MaxLoggedIn、[Key | Key]、聊天服务器、\u聊天服务器)->
获取聊天服务器(MaxLoggedIn,Key,chatserver,dict:fetch(Key,chatserver))。
%---------
获取\u聊天\u服务器\u测试()->
键=[a,c],
聊天服务器=[
{a,{server,a,a{200},
{b,{server,b,b_,100},
{c,{server,c,c_,30}
],  
ChatServerDict=dict:from_列表(ChatServers),
无=获取聊天服务器(10,[],聊天服务器DICT),
{server,c,c_,30}=get_chat_server(50,Keys,ChatServerDict),
{server,c,c_,30}=get_chat_server(150,Keys,ChatServerDict),
PossibleResults=sets:from_list([{server,a,a_u,200},{server,c,c_u,30}]),
true=设置:是_元素(
获取聊天服务器(250,按键,聊天服务器DICT),
可能的结果
),
所有的测试都通过了。
您还可以使用高阶函数,即获取满足您要求的所有聊天服务器的列表:

max_fun(Max, Keys) ->
    fun(Key, {_,_,_,LoggedInUsers}=Server, Acc) ->
            case lists:member(Key, Keys) andalso LoggedInUsers<Max of
                true -> [Server | Acc];
                false -> Acc
            end
    end.
max\u-fun(max,Keys)->
fun(Key,{{{},{,{,{,LoggedInUsers}=Server,Acc)->
案例列表:成员(键,键)和日志用户