当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


erlang table(Name)用法及代码示例


table(Name) -> QueryHandle
table(Name, Options) -> QueryHandle
类型:
Name = tab_name()
Options = Option | [Option]
Option = {n_objects, Limit} | {traverse, TraverseMethod}
Limit = default | integer() >= 1
TraverseMethod = first_next | select | {select, match_spec()}
QueryHandle = qlc:query_handle()

返回查询列表理解 (QLC) 查询句柄。这qlc(3)模块提供了一种主要针对 Mnesia 的查询语言,但 ETS 表、Dets 表和列表也被qlc作为数据来源。调用dets:table/1,2是制作 Dets 表的方法Name可用于qlc.

当关键位置只有简单限制时,qlc使用lookup(Name, Key)查找 key 。如果不可能,则遍历整个表。选项traverse确定如何完成此操作:

  • first_next - 通过调用 dets:first/1dets:next/2 一次遍历一个键。

  • select- 通过调用来遍历表dets:select/3dets:select/1。选项n_objects确定返回的对象数量(第三个参数select/3)。匹配规范(第二个参数select/3) 是由qlc

    • 简单的过滤器被转换为等效的匹配规范。

    • 给定匹配所有对象的匹配规范,必须将更复杂的过滤器应用于 select/3 返回的所有对象。

  • {select, match_spec()}- 至于select,通过调用来遍历该表dets:select/3dets:select/1。不同之处在于,匹配规范是明确指定的。这是如何声明无法在以下提供的语法中轻松表达的匹配规范qlc.

以下示例使用显式匹配规范来遍历表:

1> dets:open_file(t, []),
ok = dets:insert(t, [{1,a},{2,b},{3,c},{4,d}]),
MS = ets:fun2ms(fun({X,Y}) when (X > 1) or (X < 5) -> {Y} end),
QH1 = dets:table(t, [{traverse, {select, MS}}]).

具有隐式匹配规范的示例:

2> QH2 = qlc:q([{Y} || {X,Y} <- dets:table(t), (X > 1) or (X < 5)]).

后一个示例与前一个示例等效,可以使用函数 qlc:info/1 进行验证:

3> qlc:info(QH1) =:= qlc:info(QH2).
true

qlc:info/1 返回有关查询句柄的信息。在这种情况下,两个查询句柄返回相同的信息。

相关用法


注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 table(Name) -> QueryHandle。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。