gpt4 book ai didi

erlang - 如何查找erlang ets表字段信息?

转载 作者:行者123 更新时间:2023-12-04 06:09:54 24 4
gpt4 key购买 nike

在 erlang 中查找 ets 表的字段信息(即字段名称)的方法是什么?

我试过 ets:信息(表名) , ets:i(表名) .第一个提供有关表的详细信息,例如内存、所有者、大小、named_table、keypos、保护等。第二个提供有关表中存在的条目的详细信息。

最佳答案

问题是 ETS 处理元组而不是记录,因此没有这样的字段名称。即使您确实使用记录,ETS 也只能看到元组。

Mnesia 使用并了解记录。

编辑:对@niting112 评论的更长评论。

当然,记录只是提供命名字段等元组的语法糖。它们是纯粹的编译时构造,在编译器的早期阶段,所有记录操作都转换为相应的元组操作。内部只有元组。记录名称成为元组中的第一个元素,字段是其他元素。

看到 ETS 在元组上工作,我们可以使用记录来定义表中的元组。所以如果我们有:

-define(foo, {a,b=0,c}).

然后我们可以使用以下方法将对象添加到表中:
ets:insert(Table, #foo{a="Joe",c=1}),
ets:insert(Table, #foo{a="Robert,c=2}),
ets:insert(Table, #foo{a="Mike",c=3}),

我们添加了三个元组,每个元组有 4 个元素。重要的是要记住,如果我们使用记录来定义表元素,那么我们应该确保将键位置设置为我们希望用作索引的记录字段的索引。默认情况下,关键位置是 1,这只是记录名称,通常不是我们想要的。

我们可以使用“模式”从表中检索对象。请记住,Erlang 中没有模式数据类型,我们真正在做的是构建被解释为模式的元组。在这些“模式”中,原子 '$1' , '$2' , '$3' , ... 被解释为变量和原子 '_'被解释为无关变量。所以我们可以使用元组 {foo,'$1','_','$2'}作为模式和变量 '$1''$2'将“绑定(bind)”记录字段 ac分别。这就是函数 ets:match 所做的事情。 , ets:match_objectets:match_object以及 ets:select 中的扩展形式.

我们还可以使用记录定义来生成这些“模式”以从表中检索元素。我们只使用记录构造器语法,所以 #foo{a='$1',b='_',c='$2'}生成与上一段中的示例相同的元组“模式”。有一些特殊的记录语法对于生成这些“模式”非常有用:特殊(通常是非法的)字段名称 _用于为构造函数中未明确给出的所有字段定义默认值。所以在这些情况下,我们可以使用 _='_'将所有未指定的字段设置为“无关变量” '_' .非常适合 ets 匹配中的模式。所以“模式” #foo{b=49,_='_'}变成元组 {foo,'_',49,'_'} .

注:这些是在正常模式匹配中使用的非正常模式,而是由 ETS 解释为模式的数据。非常不同的东西。

抱歉在这里有点过火了,我得意忘形了。

关于erlang - 如何查找erlang ets表字段信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7899049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com