erlang 无法从ets表中删除和选择

sqxo8psd  于 2022-12-08  发布在  Erlang
关注(0)|答案(2)|浏览(198)

我在从ETS检索和删除记录时遇到问题。
插入后,它们像:

:ets.insert(
  :table_name,
  {id, location, [name, x, z]}
)

我无法像这样删除它们:

:ets.delete(:table_name, id)

我也试过了,但没有任何反馈。

:ets.match(:table_name, {id, location, '_'})
yfwxisqw

yfwxisqw1#

如果您想在ETS(和DETS)周围使用Elixir Package 器,可以使用pockets

iex> Pockets.new(:table_name)
{:ok, :table_name}
iex> Pockets.put(:table_name, :id, "Foo")
:table_name
iex> Pockets.get(:table_name, :id)
"Foo"
8yoxcaq7

8yoxcaq72#

您始终可以使用:ets.foldl/3查看:ets的内容

ets = :ets.new(:table_name, [])

:ets.insert(ets, {1, 2, ["foo", 3, 4]})       
#⇒ true

:ets.foldl(&[&1|&2], [], ets)
#⇒ [{1, 2, ["foo", 3, 4]}]

:ets.delete/2开箱即用:

:ets.delete ets, 1
#⇒ true

对于:ets.match/2,应该使用 atomselixirerlang在如何表示它们方面不同)* 和 * 指定要返回的内容。

:ets.match(ets, {:_, :_, :'$1'})  
#⇒ [[["foo", 3, 4]]]

:ets.match(ets, {1, :'$1', :'$2'})
#⇒ [[2, ["foo", 3, 4]]]

相关问题