我有一个简单的问题。
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 但找不到解决方案
默认情况下,
ets:new/2
创建一个受保护的表,这意味着所有者进程可以读写该表,但其他进程只能读取它。如果您希望任何进程都能够删除表条目,您可以将表公开:
ets:new(connections, [set, public]).