【发布时间】:2014-04-09 02:25:32
【问题描述】:
我一直在用 Erlang 为一个学校项目制作一个聊天应用程序,但我遇到了一个问题。我试图让我的程序并发,为了做到这一点,我为通道发送的每条消息启动一个新线程。我使用 list:foreach 执行此操作,但我想确保我不会向在频道中输入内容的人发送消息。
request(State, {message, {UserID,UserPID}, Token}) ->
case catch lists:member({UserID,UserPID}, State#channel.users) of
false ->
{{error, user_not_joined}, State};
true ->
spawn( fun() ->
ListOfUsers = State#channel.users,
UserPIDs = lists:map(fun ({_, V}) -> V end, ListOfUsers),
%spawn( fun() ->end)
lists:foreach(
fun(UserPID) -> ok end,
fun(PID) ->
spawn( fun() -> genserver:request(PID, {message_from_server, State#channel.name, UserID, Token}) end)
end, UserPIDs) end),
{ok, State}
end;
我非常想做的是与 foreach 中的 UserPID 匹配。截至目前,我只收到警告:
channel.erl:39:警告:变量“UserPID”未使用 channel.erl:39:警告:变量 'UserPID' 隐藏在 'fun' 中
第 3 行很有趣(UserPID) -> ok end,
干杯
【问题讨论】:
标签: erlang