當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


erlang table(Table)用法及代碼示例


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

通過調用一次一個鍵遍曆該表first/1next/2.


last_prev

通過調用一次一個鍵遍曆該表last/1prev/2.


select

通過調用來遍曆該表select/3select/1。選項n_objects確定返回的對象數量(第三個參數select/3);默認是返回100一次對象。這匹配規格(第二個參數select/3) 由 QLC 組裝:簡單的過濾器被轉換為等效的匹配規範,而更複雜的過濾器必須應用於由select/3給定匹配所有對象的匹配規範。


{select, MatchSpec}

至於select,通過調用來遍曆該表select/3select/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.org大神的英文原創作品 table(Table) -> QueryHandle。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。