table(Table) -> QueryHandle
table(Table, Options) -> QueryHandle
类型:
Table = table()
QueryHandle = qlc:query_handle()
Options = [Option] | Option
Option = {n_objects, NObjects} | {traverse, TraverseMethod}
NObjects = default | integer() >= 1
TraverseMethod =
first_next | last_prev | select |
{select, MatchSpec :: match_spec()}
返回查询列表理解 (QLC) 查询句柄。这qlc
模块提供了主要针对 Mnesia 的查询语言,但 ETS 表、Dets 表和列表也被 QLC 识别为数据源。调用table/1,2
是制作 ETS 表的方法Table
可用于QLC。
当对关键位置只有简单的限制时,QLC使用lookup/2
查找 key 。如果不可能,则遍历整个表。选项traverse
确定如何完成此操作:
first_next
last_prev
select
-
通过调用来遍历该表
select/3
和select/1
。选项n_objects
确定返回的对象数量(第三个参数select/3
);默认是返回100
一次对象。这匹配规格(第二个参数select/3
) 由 QLC 组装:简单的过滤器被转换为等效的匹配规范,而更复杂的过滤器必须应用于由select/3
给定匹配所有对象的匹配规范。 {select, MatchSpec}
-
至于
select
,通过调用来遍历该表select/3
和select/1
。不同之处在于明确指定了匹配规范。这就是如何声明在 QLC 提供的语法中无法轻松表达的匹配规范。
例子:
这里使用显式匹配规范来遍历表:
9> true = ets:insert(Table = ets:new(t, []), [{1,a},{2,b},{3,c},{4,d}]),
MS = ets:fun2ms(fun({X,Y}) when (X > 1) or (X < 5) -> {Y} end),
QH1 = ets:table(Table, [{traverse, {select, MS}}]).
具有隐式匹配规范的示例:
10> QH2 = qlc:q([{Y} || {X,Y} <- ets:table(Table), (X > 1) or (X < 5)]).
后一个示例与前一个示例等效,可以使用函数 qlc:info/1
进行验证:
11> qlc:info(QH1) =:= qlc:info(QH2).
true
qlc:info/1
返回有关查询句柄的信息,在这种情况下,为两个查询句柄返回相同的信息。
相关用法
- erlang table(Name)用法及代码示例
- erlang tan用法及代码示例
- erlang take(Key, Orddict)用法及代码示例
- erlang take(Key, Map1)用法及代码示例
- erlang take(String, Characters)用法及代码示例
- erlang tuple_to_list用法及代码示例
- erlang term_to_binary用法及代码示例
- erlang term_to_binary(Term)用法及代码示例
- erlang throw(Any)用法及代码示例
- erlang time()用法及代码示例
- erlang timestamp()用法及代码示例
- erlang tl(List)用法及代码示例
- erlang trace_pattern(MFA :: send, MatchSpec, FlagList :: [])用法及代码示例
- erlang trace_pattern(MFA :: 'receive', MatchSpec, FlagList :: [])用法及代码示例
- erlang trunc(Number)用法及代码示例
- erlang tuple_size(Tuple)用法及代码示例
- erlang tuple_to_list(Tuple)用法及代码示例
- erlang to_list(Q :: queue(Item))用法及代码示例
- erlang traverse(Name, Fun)用法及代码示例
- erlang to_list(MapOrIterator)用法及代码示例
- erlang titlecase(String :: unicode:chardata())用法及代码示例
- erlang to_float(String)用法及代码示例
- erlang to_integer(String)用法及代码示例
- erlang to_graphemes(String :: unicode:chardata())用法及代码示例
- erlang trim(String)用法及代码示例
注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 table(Table) -> QueryHandle。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。