Mi piacerebbe sapere se l'espressione xquery FLWOR ha un'istruzione exit come continue e break?XQuery ha un'istruzione exit per le espressioni FLWOR
Ad esempio, desidero uscire dal ciclo for quando si raggiunge una condizione particolare.
Mi piacerebbe sapere se l'espressione xquery FLWOR ha un'istruzione exit come continue e break?XQuery ha un'istruzione exit per le espressioni FLWOR
Ad esempio, desidero uscire dal ciclo for quando si raggiunge una condizione particolare.
Vorrei sapere se XQuery FLWOR espressione ha una dichiarazione di uscita come continuare e rompere?
Ad esempio, desidero uscire dal ciclo quando una condizione specifica è la copertura .
XQuery è un funzionale lingua , che tra le altre cose significa che non esiste il concetto rigoroso ordine di esecuzione. Pertanto qualsiasi tentativo di fare qualcosa di specifico quando succede qualcosa, non ha senso.
L'approccio corretto è quello di fare qualcosa se una condizione specifica è soddisfatta.
Non esiste alcun modo per uscire da un'espressione FLWOR diversa dalla funzione error()
, ma ciò interrompe l'elaborazione.
Uno non dovrebbe preoccuparsi troppo dell'ottimizzazione - molti processori hanno buoni ottimizzatori.
Così molti processori valuteranno pigramente e si fermerà la valutazione dell'espressione FLOWR sotto, la prima volta produce risultato che soddisfa la specific-condition()
:
(someFlowerExpression)[specific-condition(.)][1]
XQuery Scripting ha un'istruzione di uscita:
variable $i := 0;
while(true())
{
$i := $i + 1;
if($i = 3) then
exit returning $i
else();
}
O
for $i in (1 to 1000)
return
if($i = 3) then
exit returning $i;
else();
Puoi provare questo esempio dal vivo al http://www.zorba-xquery.com/html/demo#JvSLsVh3ZjhvTHecVd9jyE1vEBc=
Non ci sono parole chiave di uscita o di restituzione in XQuery. –
'for $ i in (da 1 a 1000) dove $ i LT 4 ritorno $ i ' –
Entrambi i collegamenti sono morti :( –
Anche se la domanda è abbastanza vecchia, la risposta è come alcune persone nuove potrebbero affrontare una simile situazione e ottenere una soluzione migliore.
Questa soluzione sarebbe eseguito facilmente su BaseX 7,6
for $i in (1 to 10)
return
if ($i = 3) then
$i
else
exit
uscita sarà - 3
O questo genererà l'uscita - 3,
for $i in (1 to 10)
return
if ($i = 3) then
$i
else
()
Non ho avuto il tempo di provare questo in BaseX, ma in teoria questo sarebbe uscita nulla , dal momento che per la prima volta attraverso il ciclo, a causa di '$ i = 1', sarebbe già uscito. –
@Vincent: ho aggiornato la risposta, la seconda funziona con BaseX, l'ho verificata. SOLO 3. – John
espressioni FLWOR non sono realmente anelli - non è garantito che gli elementi "for" saranno valutati in un dato ordine, o anche in un singolo thread; potevano essere tutti fatti in parallelo e combinati insieme in una volta, e finché la semantica fosse mantenuta, ciò sarebbe valido. –