XQuery成语return()

时间:2013-07-19 14:28:23

标签: xquery

为什么在XQuery查询结束时看到return()

e.g。

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

 return ()

3 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

答案 1 :(得分:0)

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

$updateIssues的赋值遍及一堆节点,将值从调用返回到local:UpdateIssue(),并将这些返回值的序列用作变量值。

但是,然后,该变量没有任何操作,函数只是向调用者返回任何内容。

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

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

答案 2 :(得分:0)

如果我的问题正确,你会问return ()

return ()意味着你要返回一个空格,所以简单地说你只想将全局变量分配给某个东西,而不想从函数中返回任何东西。

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

作为一种功能语言,XQuery适用于函数。

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

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