【发布时间】:2013-07-19 14:28:23
【问题描述】:
为什么我在 XQuery 查询的末尾看到 return()?
例如
let $updateIssues:=
for $issue in fn:collection("InProgress_Audit")/ProductIssue
return local:UpdateIssue($issue)
return ()
【问题讨论】:
标签: xquery
为什么我在 XQuery 查询的末尾看到 return()?
例如
let $updateIssues:=
for $issue in fn:collection("InProgress_Audit")/ProductIssue
return local:UpdateIssue($issue)
return ()
【问题讨论】:
标签: xquery
尚不完全清楚您的问题是什么。鉴于您的表述方式,可能的答案包括:
也许您的意思是“为什么会在那里?”可能的答案包括:
return 子句,由let 子句开始的FLWOR 表达式不完整。())。
return 关键字可以写成看起来像一个函数调用很有趣。 (作者可能也喜欢欺负新手和恶作剧;谨慎接近。)也许您的意思是“这个查询是什么意思,它是什么意思?”可能的答案包括:
updateIssues(其值由嵌套的 FLWOR 表达式给出)的绑定,然后返回 ()(即空序列)。由于 return 子句中的任何内容都不依赖于 updateIssues 的值,因此 XQuery 引擎不需要评估用于指定值的表达式(但也不能保证它不会这样做——处理器是允许对优化很聪明,但不是必须的)。【讨论】:
在您的示例中,return () 表达式是您的 let 表达式的主体。
对$updateIssues 的赋值是遍历一堆节点,从对local:UpdateIssue() 的调用中返回值,这些返回值的序列被用作变量值。
但是,没有对变量做任何事情,函数只是不向其调用者返回任何内容。
我担心优化处理器可能会选择放弃分配,因为被分配的变量没有在任何地方使用,但是如果您正在获得更新结果,您正在使用的处理器可能不会这样做期待。
所以,最后一行所做的只是在调用时返回一个空序列作为函数的值。
【讨论】:
如果我没听错你的问题,你是在问return ()。
return () 表示您返回的是一个空白,所以简而言之,您只想将全局变量分配给某个东西,而不想从函数中返回任何东西。
如果你想知道返回表达式的详细信息。它是 XQuery FLWOR 表达式的一部分。
作为一种函数式语言 XQuery 适用于函数。
For 循环、Let 循环、Where、Order By (FLWO) 都在内部(在 XQuery 引擎内部)充当函数。因此,它们都需要在调用后返回以指定需要从它们输出的内容。
如果您需要有关 XQuery 函数的更多信息,可以参考 offical 文档。
【讨论】: