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 的元组。