2010-06-26 67 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

相關問題