元组作为 ets 表的键?
Posted
技术标签:
【中文标题】元组作为 ets 表的键?【英文标题】:Tuple as Key for ets table? 【发布时间】:2016-11-22 02:37:51 【问题描述】:我想在 ETS 表中存储有关其他网络参与者信息的元组。
我想使用 ip_address(), port_number()
的元组(inet:peername(Socket)
的返回作为条目的键。我想使用地址/端口的组合作为 ETS 表中其他节点/条目的标识符。
这可以用 ets 实现吗?还是我必须使用其他类型作为键?
【问题讨论】:
你的意思是像ets:insert(Table, "127.0.0.1", 4000, value).
?这似乎工作正常。
更像ets:insert(Table, 0,0,0,0,0,0,0,1, 4000, value).
。它对我来说似乎也很好用。然而,我最近遇到了一些奇怪的错误,找不到有关是否可以使用元组的信息。我可以想象,也许 erlang 会混淆它应该将哪个嵌套元组视为键。
这也应该没问题。也许添加一些相关的代码和你得到的确切错误。
【参考方案1】:
ETS 代表“Erlang Term Storage”,它可以存储任何 Erlang 术语,包括元组和元组的元组。 the ets
man page 的描述部分详细说明了如何比较和匹配特定表类型的术语,ets:lookup/2
的文档也讨论了这一点。对于某些表类型,Erlang term order 很重要。
对于存储元组的哪一部分是键没有混淆;用于创建表的ets:new/2
function 包括用于指示关键元素的keypos, Pos
选项。如果没有提供keypos, Pos
,则第一个元素是key。
【讨论】:
ETS 代表“Erlang Term Storage”,它可以存储任何 Erlang 术语,包括元组...--来自ets docs : 数据被组织成一组动态表,可以存储元组。 -- 来自LYSE:所有 ETS 表都本地存储 Erlang 元组,其中包含您想要的任何内容,其中一个元组元素将充当主键..--听起来像是唯一的数据类型ets 可以存储的是一个元组(元组中包含任何其他数据类型)。这是真的吗? 关于表存储,是的,都是元组。但是元组对表用户的意义是不同的。在一种情况下,存储的元组是对用户有意义的整个值;例如,如果元组真的是一条记录,那么整条记录就是用户感兴趣的值,一个字段是键。另一种情况涉及不同但明确配对成元组的键和值,因为这是 ets 需要的。这种情况包括作为它们自己的键的值,它们显式地放置在元组中以满足 ets,例如42
或 "foo"
。以上是关于元组作为 ets 表的键?的主要内容,如果未能解决你的问题,请参考以下文章