作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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}),
'$1'
,
'$2'
,
'$3'
, ... 被解释为变量和原子
'_'
被解释为无关变量。所以我们可以使用元组
{foo,'$1','_','$2'}
作为模式和变量
'$1'
和
'$2'
将“绑定(bind)”记录字段
a
和
c
分别。这就是函数
ets:match
所做的事情。 ,
ets:match_object
和
ets:match_object
以及
ets:select
中的扩展形式.
#foo{a='$1',b='_',c='$2'}
生成与上一段中的示例相同的元组“模式”。有一些特殊的记录语法对于生成这些“模式”非常有用:特殊(通常是非法的)字段名称
_
用于为构造函数中未明确给出的所有字段定义默认值。所以在这些情况下,我们可以使用
_='_'
将所有未指定的字段设置为“无关变量”
'_'
.非常适合 ets 匹配中的模式。所以“模式”
#foo{b=49,_='_'}
变成元组
{foo,'_',49,'_'}
.
关于erlang - 如何查找erlang ets表字段信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7899049/
我是一名优秀的程序员,十分优秀!