【问题标题】:XQuery idiom return()XQuery 习语 return()
【发布时间】:2013-07-19 14:28:23
【问题描述】:

为什么我在 XQuery 查询的末尾看到 return()

例如

 let $updateIssues:=
     for $issue in fn:collection("InProgress_Audit")/ProductIssue
     return local:UpdateIssue($issue) 

 return ()

【问题讨论】:

    标签: xquery


    【解决方案1】:

    尚不完全清楚您的问题是什么。鉴于您的表述方式,可能的答案包括:

    • 你会看到它,因为它就在那里。
    • 您看到它是因为有人在编写查询时输入了它。

    也许您的意思是“为什么会在那里?”可能的答案包括:

    • 因为没有return 子句,由let 子句开始的FLWOR 表达式不完整。
    • 之所以出现,是因为该查询的作者有一种古怪的幽默感,并认为四行查询是一种有趣的方式来编写表示空序列的表达式(可以更简洁地写成())。
    • 之所以存在,是因为查询的作者希望您作为读者知道他真的更愿意编写 C 或 Java,或者,真的,任何其他编程语言。
    • 之所以存在,是因为查询的作者发现 XQuery 中的 return 关键字可以写成看起来像一个函数调用很有趣。 (作者可能也喜欢欺负新手和恶作剧;谨慎接近。)

    也许您的意思是“这个查询是什么意思,它是什么意思?”可能的答案包括:

    • 查询返回空序列。
    • 查询采用 FLWOR 表达式的形式,该表达式定义变量 updateIssues(其值由嵌套的 FLWOR 表达式给出)的绑定,然后返回 ()(即空序列)。由于 return 子句中的任何内容都不依赖于 updateIssues 的值,因此 XQuery 引擎不需要评估用于指定值的表达式(但也不能保证它不会这样做——处理器是允许对优化很聪明,但不是必须的)。

    【讨论】:

      【解决方案2】:

      在您的示例中,return () 表达式是您的 let 表达式的主体。

      $updateIssues 的赋值是遍历一堆节点,从对local:UpdateIssue() 的调用中返回值,这些返回值的序列被用作变量值。

      但是,没有对变量做任何事情,函数只是不向其调用者返回任何内容。

      我担心优化处理器可能会选择放弃分配,因为被分配的变量没有在任何地方使用,但是如果您正在获得更新结果,您正在使用的处理器可能不会这样做期待。

      所以,最后一行所做的只是在调用时返回一个空序列作为函数的值。

      【讨论】:

        【解决方案3】:

        如果我没听错你的问题,你是在问return ()

        return () 表示您返回的是一个空白,所以简而言之,您只想将全局变量分配给某个东西,而不想从函数中返回任何东西。

        如果你想知道返回表达式的详细信息。它是 XQuery FLWOR 表达式的一部分。

        作为一种函数式语言 XQuery 适用于函数。

        For 循环、Let 循环、Where、Order By (FLWO) 都在内部(在 XQuery 引擎内部)充当函数。因此,它们都需要在调用后返回以指定需要从它们输出的内容。

        如果您需要有关 XQuery 函数的更多信息,可以参考 offical 文档。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-11
          • 2017-02-05
          • 2015-05-02
          • 2015-10-01
          • 2016-12-29
          • 2020-03-18
          • 1970-01-01
          相关资源
          最近更新 更多