我想在ets中创建一个表,如果它不存在的话。我怎样才能检查这个名字是否存在呢?
xe55xuns1#
可以使用:ets.whereis/1。如果指定的表不存在,则返回:undefined:
: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
hlswsv352#
如果您使用的是旧版本的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
fnatzsnv3#
您最好的方法就是查看该表是否在所有表的列表中。像这样简单的检查应该是好的:
lists:member(table_name,ets:all())
这将返回一个简单的布尔值(),您可以在案例中使用该值作为操作的基础。
fwzugrvs4#
这样就可以了:
def create_table? do if Enum.member?(:ets.all(), :my_table) == false do :ets.new(:my_table, [:public, :named_table]) end end
4条答案
按热度按时间xe55xuns1#
可以使用
:ets.whereis/1
。如果指定的表不存在,则返回:undefined
:hlswsv352#
如果您使用的是旧版本的Erlang,则可以创建一个查找函数:
信息来源:https://elixir-lang.org/getting-started/mix-otp/ets.html
fnatzsnv3#
您最好的方法就是查看该表是否在所有表的列表中。像这样简单的检查应该是好的:
这将返回一个简单的布尔值(),您可以在案例中使用该值作为操作的基础。
fwzugrvs4#
这样就可以了: