如何在ETS Erlang / Elixir中检查命名表是否存在

时间:2018-08-30 10:36:41

标签: erlang elixir ets

如果它不存在,我想在ets中创建一个表。如何检查此命名是否存在?

3 个答案:

答案 0 :(得分:6)

您可以使用:ets.whereis/1。如果命名表不存在,它将返回:undefined

iex(1)> :ets.new :foo, [:named_table]
:foo
iex(2)> :ets.whereis :foo
#Reference<0.2091350666.119668737.256142>
iex(3)> :ets.whereis :bar
:undefined

答案 1 :(得分:0)

如果您使用的是旧版的Erlang,则可以创建查找功能:

def lookup(server, name) do
  case :ets.lookup(server, name) do
    [{^name, pid}] -> {:ok, pid}
    [] -> :error
  end
end

信息取自:https://elixir-lang.org/getting-started/mix-otp/ets.html

答案 2 :(得分:0)

这应该可以解决问题:

Indexing Python object not allowed without gil