表标识符不引用现有的 ETS 表

问题描述 投票:0回答:1

在 GenServer 中

  def init(_opts \\ []) do
    table = :ets.new(:my_table, [:duplicate_bag, :public])
    {:ok, %{}}
  end

  def add_player(zone_id, socket_id) do
    :ets.thing(
      :my_table,
      {some_key, [my_uuid]}
    )
  end

但是我明白

the table identifier does not refer to an existing ETS table

这是一个公共表,我知道 init 在测试执行之前被调用,因为我登录了那里。

我不确定 ets 为什么要这样做。

erlang elixir ets
1个回答
0
投票

为了通过名称引用表,您需要在创建表时将其设为命名表:

    table = :ets.new(:my_table, [:duplicate_bag, :public, :named_table])

如果没有

:named_table
,则需要使用
:ets.new
返回的引用来访问表。

(另请注意,如果创建该表的进程终止,该表将被删除,但这似乎不是这里发生的情况。)

© www.soinside.com 2019 - 2024. All rights reserved.