0

为什么我会看到return()XQuery 查询的结尾?

例如

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

 return ()
4

3 回答 3

2

目前尚不完全清楚你的问题是什么。鉴于您制定它的方式,可能的答案包括:

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

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

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

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

  • 查询返回空序列。
  • 该查询采用 FLWOR 表达式的形式,该表达式定义了变量的绑定updateIssues(其值由嵌套的 FLWOR 表达式给出),然后返回()(即空序列)。updateIssues由于 return 子句中没有任何内容取决于对优化很聪明,但不是必须的)。
于 2013-07-24T17:14:37.957 回答
0

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

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

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

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

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

于 2013-07-19T15:10:35.550 回答
0

如果我正确地回答了您的问题,那么您要问的是return ().

return ()意味着您要返回一个空白,因此简而言之,您只想将全局变量分配给某个东西,而不想从函数中返回任何东西。

否则,如果您想了解 Return 表达式的详细信息。它是 XQueryFLWOR表达式的一部分。

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

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

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

于 2015-02-13T01:04:30.403 回答