代码之家  ›  专栏  ›  技术社区  ›  Kevin Brown

在什么时候加载变量?

  •  2
  • Kevin Brown  · 技术社区  · 6 年前

    我们正在重构一个非常大的系统,查看我们编写的许多xQuery,并想知道使用并包含声明许多全局变量的xQuery是否会有所帮助。

    意思是说我有一些xQuery_全球的xq是这样的:

    module namespace g="global/variables";
    declare variable $g:col.build := '/db/foo/data/Build';
    declare variable $g:doc.langmap := doc(concat($g:col.build,'/','langmap.xml'));
    declare variable $g:doc.easymap := doc(concat($g:col.build,'/','easymap.xml'));
    declare variable $g:doc.foomap := doc(concat($g:col.build,'/','foomap.xml'));
    

    然后我在我的xQuery中引用它:

    import module namespace g='global/variables' at '_global.xq';
    

    $g:doc.langmap 在我的xQuery中。另外两个呢( $g:doc.easymap $g:doc.foomap

    居住在 import 或者仅当我在查询中实际使用它时?就像我写了一个永远不会引用的xQuery $g:doc。朗格图 但导入该模块时,它是否仍在内存中创建并填充?

    我想知道,如果我有几十个其他的声明变量 _global.xq 用于许多其他XQuery。当然,我不使用,但在每一篇文章中只使用了一些参考文献。问题很简单。。。是吗 import module 命令导致在导入时对它们进行求值,还是仅在使用它们时才有值?

    我想这将是一个非常简短的答案。

    1 回复  |  直到 6 年前
        1
  •  4
  •   Kevin Brown    6 年前

    好的,我相信我已经通过一些简单的测试知道了答案。

    当运行大约需要87秒时,我创建了一个Xquery。

    xquery version "3.0";
    declare variable $test := collection('/db/foo/data')//*[@docnum='GS01'];
    let $foo := 'bar'
    return
    $test
    

    xquery version "3.0";
    declare variable $test := collection('/db/foo/data')//*[@docnum='GS01'];
    let $foo := 'bar'
    return
    $foo
    

    它只运行了几分之一秒。这使我相信$test实际上并没有填充数据,除非使用它来回答我的问题。如果我错了,请插话。