无法从 ets table 中删除和 select
Unable to delete and select from an ets table
我在从 ETS 中检索和删除记录时遇到问题。
像这样插入后:
:ets.insert(
:table_name,
{id, location, [name, x, z]}
)
我无法像这样删除它们:
:ets.delete(:table_name, id)
我也试过了,这 return 什么都没有。
:ets.match(:table_name, {id, location, '_'})
您随时可以通过 :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
应该使用原子(elixir differs from erlang在如何表示它们)和指定什么返回 return。
:ets.match(ets, {:_, :_, :''})
#⇒ [[["foo", 3, 4]]]
:ets.match(ets, {1, :'', :''})
#⇒ [[2, ["foo", 3, 4]]]
如果你想在 ETS(和 DETS)周围使用 Elixir 包装器,你可以使用 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"
我在从 ETS 中检索和删除记录时遇到问题。
像这样插入后:
:ets.insert(
:table_name,
{id, location, [name, x, z]}
)
我无法像这样删除它们:
:ets.delete(:table_name, id)
我也试过了,这 return 什么都没有。
:ets.match(:table_name, {id, location, '_'})
您随时可以通过 :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
应该使用原子(elixir differs from erlang在如何表示它们)和指定什么返回 return。
:ets.match(ets, {:_, :_, :''})
#⇒ [[["foo", 3, 4]]]
:ets.match(ets, {1, :'', :''})
#⇒ [[2, ["foo", 3, 4]]]
如果你想在 ETS(和 DETS)周围使用 Elixir 包装器,你可以使用 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"