为什么 Erlang 字符串不能用作 ets table 名称?
why Erlang string can't used as ets table name?
我是动态创建的 ets
table,所以最好避免使用 atom 作为名称。
简单的使用字符串作为名字,如:
:ets.new("aaa", [:named_table])
但是无法编译:
** (ArgumentError) argument error
(stdlib) :ets.new("aaa", [])
如果您动态创建 ETS table,一种方法是将它们创建为未命名的 table,并使用 table 返回的 ID 11=] 访问它们:
iex(1)> table1 = :ets.new(:foo, [])
8212
iex(2)> table2 = :ets.new(:foo, [])
12309
iex(3)> :ets.insert(table1, {:a, 1})
true
iex(4)> :ets.insert(table2, {:a, 2})
true
iex(5)> :ets.lookup(table1, :a)
[a: 1]
iex(6)> :ets.lookup(table2, :a)
[a: 2]
(在 Erlang/OTP 20.0 中,table id 是一个引用而不是整数,但它的工作方式相同;参见 。)
我是动态创建的 ets
table,所以最好避免使用 atom 作为名称。
简单的使用字符串作为名字,如:
:ets.new("aaa", [:named_table])
但是无法编译:
** (ArgumentError) argument error
(stdlib) :ets.new("aaa", [])
如果您动态创建 ETS table,一种方法是将它们创建为未命名的 table,并使用 table 返回的 ID 11=] 访问它们:
iex(1)> table1 = :ets.new(:foo, [])
8212
iex(2)> table2 = :ets.new(:foo, [])
12309
iex(3)> :ets.insert(table1, {:a, 1})
true
iex(4)> :ets.insert(table2, {:a, 2})
true
iex(5)> :ets.lookup(table1, :a)
[a: 1]
iex(6)> :ets.lookup(table2, :a)
[a: 2]
(在 Erlang/OTP 20.0 中,table id 是一个引用而不是整数,但它的工作方式相同;参见