【问题标题】:Tuple as Key for ets table?元组作为 ets 表的键?
【发布时间】: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 会混淆它应该将哪个嵌套元组视为键。
  • 这也应该没问题。也许添加一些相关的代码和你得到的确切错误。

标签: erlang ets


【解决方案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"}
猜你喜欢
  • 2020-08-11
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 2018-06-09
  • 2014-01-28
相关资源
最近更新 更多