2010-06-26 38 views
6

我想知道xquery FLWOR表达式是否具有类似continue和break的退出语句?XQuery是否具有用于FLWOR表达式的退出语句

例如我想在达到特定条件时退出for循环。

+1

FLWOR表达式是不是真的环路 - 不能保证“for”元素将按给定的顺序进行评估,甚至不会在单个线程中进行评估;它们都可以并行完成并一次结合在一起,只要保持语义,这将是有效的。 – 2012-05-11 13:46:17

回答

7

我想知道,如果XQuery的FLWOR 表达有像 退出声明中继续突破?

例如,当特定条件达到 时,我想退出为 循环。

XQuery是一种官能语言,这在许多其他事情意味着存在的执行顺序没有严格的概念。因此,任何尝试做某些事情时都会发生某些具体的事情,并不有意义。

正确的做法是做点什么如果满足特定的条件。

除了使用函数外,没有办法退出FLWOR表达式,但会终止处理。

人们不应该过分担心优化 - 许多处理器都有很好的优化器。

因此,许多处理器将延迟计算,将停止以下FLOWR表达的评价,它第一次产生结果满足specific-condition()

(someFlowerExpression)[specific-condition(.)][1] 
1

XQuery Scripting有一个退出声明:

variable $i := 0; 
while(true()) 
{ 
    $i := $i + 1; 
    if($i = 3) then 
     exit returning $i 
    else(); 
} 

for $i in (1 to 1000) 
return 
    if($i = 3) then 
    exit returning $i; 
    else(); 

你可以试试这个例子:http://www.zorba-xquery.com/html/demo#JvSLsVh3ZjhvTHecVd9jyE1vEBc=

+0

XQuery中没有退出或返回关键字。 – 2014-10-23 21:36:14

+0

'$对于我在(1〜1000) 其中$我下4 回报 $ I ' – 2014-10-23 21:37:11

+0

两个链接都死了:( – 2015-01-27 17:30:02

0

虽然这个问题还比较陈旧,但我正在回答这个问题,因为有些新人可能会遇到这种情况,并会得到更好的解决方案。

该解决方案将在BaseX轻松运行7.6

for $i in (1 to 10) 
return 
    if ($i = 3) then 
     $i 
    else 
     exit 

输出将是 - 3

OR这将产生输出 - 3,

for $i in (1 to 10) 
return 
    if ($i = 3) then 
     $i 
    else 
     () 
+0

我没有时间在BaseX试试这个,但理论上这将输出什么,因为第一次通过循环,因为'$ i = 1',它已经退出了。 – 2015-01-27 17:34:42

+0

@Vincent - 我已经更新了答案。第二个与BaseX一起工作,我测试过了。只有3。 – John 2015-01-30 05:00:54

相关问题