gpt4 book ai didi

erlang记录麻烦

转载 作者:行者123 更新时间:2023-12-04 13:07:31 25 4
gpt4 key购买 nike

我正在为我的一个模块中的记录而苦苦挣扎。

我在代码顶部定义了一条记录:

-record(user,  {pid,
name,
nick}).

简而言之,每个用户都将被表示为具有自己的 pid 和其他字段的进程。

稍后在模块中,我将执行以下操作:
Pid = UserPid,
GetUser = fun(X) ->
if X#user.pid =:= Pid -> true;
X#user.pid=/= Pid -> false
end
end,
User = lists:filter(GetUser, Users),
io:format("User pid is ~p~n",[User#user.pid]).

运行此代码,我得到:
** exception error: {badrecord,user}

但如果我这样做:
io:format("User ~p~n",[User]).       

它打印
User [{user,<0.33.0>,name1,nick1}]

谁能指出我错过了什么?

谢谢

最佳答案

问题是 lists:filter 返回另一个列表,而不是单个元素。因此,您基本上是在尝试将列表视为记录。如果您仔细查看

io:format("User ~p~n",[User])
%% User [{user,<0.33.0>,name1,nick1}]

您会注意到该语句包含在 [] 中。 .这是一个 list 。如果您只需要第一个用户使用
[First | Rest] = lists:filter(GetUser, Users)

如果你只想要 pid 使用 lists:map :
UsersWithPid = lists:filter(GetUser, Users),
Pids = lists:map(fun(U) -> U#user.pid end, UsersWithPid).

现在 Pids是带有 pid 的用户的 pid 列表。

关于erlang记录麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6773369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com