Erlang:遍历列表 - badarg
Erlang: Loop through list - badarg
我的问题是,在我使用 lists:any 函数的函数中,它永远无法完成对给定列表的查找。以下是我得到的错误:
{badarg,
[{genserver,request,3,
[{file,
[99,58,47,85,115,101,114,115,47,68,97,118,105,100,47,
68,101,115,107,116,111,112,47,71,106,111,114,100,32,
102,114,195,131,194,165,110,32,103,114,117,110,100,
101,110,47,103,101,110,115,101,114,118,101,114,46,101,
114,108]},
{line,33}]},
{lists,any,2,[{file,"lists.erl"},{line,1223}]},
{server,loop,2,
[{file,
[99,58,47,85,115,101,114,115,47,68,97,118,105,100,47,
68,101,115,107,116,111,112,47,71,106,111,114,100,32,
102,114,195,131,194,165,110,32,103,114,117,110,100,
101,110,47,115,101,114,118,101,114,46,101,114,108]},
{line,27}]},
{genserver,loop,2,
[{file,
[99,58,47,85,115,101,114,115,47,68,97,118,105,100,47,
68,101,115,107,116,111,112,47,71,106,111,114,100,32,
102,114,195,131,194,165,110,32,103,114,117,110,100,
101,110,47,103,101,110,115,101,114,118,101,114,46,101,
114,108]},
{line,13}]}]}}
我使用以下代码填充列表:
channels = channels ++ [{Channel}]
其中 Channel 是一个字符串,channels 被初始化为 [ ]。最后,下面的 #27 是导致错误的原因:
#24 loop(St, {Nick, PID, disconnect}) ->
#25 case lists:keymember(Nick, 1, St#server_st.users) of
#26 false -> {{error, user_not_connected, "Nick doesn't exist on server."}, St};
#27 true -> case lists:any(fun(F) -> genserver:request(F, {Nick, PID, is_member}) end, St#server_st.channels) of
#28 true -> {{error, leave_channels_first, "Still in a channel."}, St};
#29 false -> {ok, St#server_st{users = lists:delete({Nick, PID}, St#server_st.users)}}
#30 end
#31 end;
其中F用作PID。我发现它是我如何填充列表的问题,但无论我如何扭曲和转动它,我最终都会得到相同的结果。
错误来自 genserver:request/2 调用,请检查传递的参数对于函数定义是否有效。例如,从上面的信息来看,第 27 行的 F 将是一个包含字符串而不是 PID 的元组。
我的问题是,在我使用 lists:any 函数的函数中,它永远无法完成对给定列表的查找。以下是我得到的错误:
{badarg,
[{genserver,request,3,
[{file,
[99,58,47,85,115,101,114,115,47,68,97,118,105,100,47,
68,101,115,107,116,111,112,47,71,106,111,114,100,32,
102,114,195,131,194,165,110,32,103,114,117,110,100,
101,110,47,103,101,110,115,101,114,118,101,114,46,101,
114,108]},
{line,33}]},
{lists,any,2,[{file,"lists.erl"},{line,1223}]},
{server,loop,2,
[{file,
[99,58,47,85,115,101,114,115,47,68,97,118,105,100,47,
68,101,115,107,116,111,112,47,71,106,111,114,100,32,
102,114,195,131,194,165,110,32,103,114,117,110,100,
101,110,47,115,101,114,118,101,114,46,101,114,108]},
{line,27}]},
{genserver,loop,2,
[{file,
[99,58,47,85,115,101,114,115,47,68,97,118,105,100,47,
68,101,115,107,116,111,112,47,71,106,111,114,100,32,
102,114,195,131,194,165,110,32,103,114,117,110,100,
101,110,47,103,101,110,115,101,114,118,101,114,46,101,
114,108]},
{line,13}]}]}}
我使用以下代码填充列表:
channels = channels ++ [{Channel}]
其中 Channel 是一个字符串,channels 被初始化为 [ ]。最后,下面的 #27 是导致错误的原因:
#24 loop(St, {Nick, PID, disconnect}) ->
#25 case lists:keymember(Nick, 1, St#server_st.users) of
#26 false -> {{error, user_not_connected, "Nick doesn't exist on server."}, St};
#27 true -> case lists:any(fun(F) -> genserver:request(F, {Nick, PID, is_member}) end, St#server_st.channels) of
#28 true -> {{error, leave_channels_first, "Still in a channel."}, St};
#29 false -> {ok, St#server_st{users = lists:delete({Nick, PID}, St#server_st.users)}}
#30 end
#31 end;
其中F用作PID。我发现它是我如何填充列表的问题,但无论我如何扭曲和转动它,我最终都会得到相同的结果。
错误来自 genserver:request/2 调用,请检查传递的参数对于函数定义是否有效。例如,从上面的信息来看,第 27 行的 F 将是一个包含字符串而不是 PID 的元组。