我有一个简单的问题。ets:lookup()
可以找到记录,但ets:delete()
给出badarg
错误。
case ets:lookup(Connections, Next) of
[] ->
case ets:lookup(Connections, Prev) of
[{Network, Node, Address}]->
print_ets_table(Connections),
ets:delete(Connections, Network), -> this gives error
ets:insert(Connections, {Next, Node, Address}),
Next;
_ ->
% Report
Prev
end;
_ ->
% Report
Prev
end;
print_ets_table(连接):
[{<<134,176,18,190,115,242,102,213>>,
{sslsocket,{gen_tcp,#Port<0.6>,tls_connection,
[{option_tracker,<0.110.0>},
{session_tickets_tracker,disabled},
{session_id_tracker,<0.111.0>}]},
[<0.114.0>,<0.113.0>]},
<<127,0,0,1>>}]
和误差
{badarg,[{ets,delete,
[#Ref<0.3551319967.1683357697.51087>,
<<134,176,18,190,115,242,102,213>>],
[{error_info,#{cause => access,module => erl_stdlib_errors}}]}
Network
是二进制类型的数据,表是这样定义的
Connections = ets:new(connections, [set])
我读了ets文档,问了GPT,但找不到解决方案。
1条答案
按热度按时间knsnq2tg1#
默认情况下,
ets:new/2
创建一个受保护的表,这意味着所有者进程可以读写表,但其他进程只能读取它。如果你想让任何进程都能删除表条目,你可以将表设置为公共的: