Как проверить, существует ли именованная таблица в ETS Erlang / Elixir или нет - PullRequest
0 голосов
/ 30 августа 2018

Я хочу создать таблицу в ets, если она не существует. Как я могу проверить, существует ли это имя или нет?

Ответы [ 3 ]

0 голосов
/ 01 сентября 2018

Если вы используете более старую версию Erlang, вы можете создать функцию поиска:

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

Информация взята из: https://elixir -lang.org / Getting-Start / Mix-otp / ets.html

0 голосов
/ 12 марта 2019

Самое лучшее, что вы можете сделать, это просто посмотреть, есть ли таблица в списке всех таблиц. Такая простая проверка, как это должно быть хорошо:

lists:member(table_name,ets:all())

Возвращает простой логический (), который вы можете использовать в случае, чтобы основывать действия.

0 голосов
/ 30 августа 2018

Вы можете использовать :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
...