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


erlang info(QH)用法及代码示例


info(QH) -> Info
info(QH, Options) -> Info
类型:
QH = query_handle_or_list()
Options = [Option] | Option
Option = EvalOption | ReturnOption
EvalOption = 
    {cache_all, cache()} |
    cache_all |
    {max_list_size, max_list_size()} |
    {tmpdir_usage, tmp_file_usage()} |
    {tmpdir, tmp_directory()} |
    {unique_all, boolean()} |
    unique_all
ReturnOption = 
    {depth, Depth} |
    {flat, boolean()} |
    {format, Format} |
    {n_elements, NElements}
Depth = infinity | integer() >= 0
Format = abstract_code | string
NElements = infinity | integer() >= 1
Info = abstract_expr() | string()

返回有关查询句柄的信息。该信息说明了准备查询以进行评估的结果的简化和优化。这个函数可能主要在调试时有用。

该信息采用 Erlang 表达式的形式,其中 QLC 最有可能出现。根据上述 QLC 表的格式函数,不能确定该信息绝对准确。

选项:

  • 默认情况下返回块中的一系列 QLC,但如果指定了选项 {flat, false},则返回一个单个 QLC。

  • 默认情况下返回字符串,但如果指定选项{format, abstract_code},则返回抽象代码。在抽象代码中,端口标识符、引用和pid均由字符串表示。

  • 默认情况下返回列表中的所有元素,但如果指定选项{n_elements, NElements},则仅返回有限数量的元素。

  • 默认情况下是显示对象的所有部分并匹配规范,但如果指定了选项{depth, Depth},则低于一定深度的部分术语将被替换为'...'

info(QH) 相当于 info(QH, [])

例子:

在以下示例中,插入两个简单的 QLC 仅用于保存选项 {unique, true}

1> QH = qlc:q([{X,Y} || X <- [x,y], Y <- [a,b]]),
io:format("~s~n", [qlc:info(QH, unique_all)]).
begin
    V1 =
        qlc:q([
               SQV ||
                   SQV <- [x, y]
              ],
              [{unique, true}]),
    V2 =
        qlc:q([
               SQV ||
                   SQV <- [a, b]
              ],
              [{unique, true}]),
    qlc:q([
           {X,Y} ||
               X <- V1,
               Y <- V2
          ],
          [{unique, true}])
end

在以下示例中,已插入 QLC V2 以显示连接的生成器和所选的连接方法。查找连接使用约定:第一个生成器 (G2) 是遍历的生成器,第二个生成器 (G1) 是查找常量的表。

1> E1 = ets:new(e1, []),
E2 = ets:new(e2, []),
true = ets:insert(E1, [{1,a},{2,b}]),
true = ets:insert(E2, [{a,1},{b,2}]),
Q = qlc:q([{X,Z,W} ||
{X, Z} <- ets:table(E1),
{W, Y} <- ets:table(E2),
X =:= Y]),
io:format("~s~n", [qlc:info(Q)]).
begin
    V1 =
        qlc:q([
               P0 ||
                   P0 = {W, Y} <-
                       ets:table(#Ref<0.3098908599.2283929601.256549>)
              ]),
    V2 =
        qlc:q([
               [G1 | G2] ||
                   G2 <- V1,
                   G1 <-
                       ets:table(#Ref<0.3098908599.2283929601.256548>),
                   element(2, G1) =:= element(1, G2)
              ],
              [{join, lookup}]),
    qlc:q([
           {X, Z, W} ||
               [{X, Z} | {W, Y}] <- V2
          ])
end

相关用法


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