Je voudrais savoir si l'expression xquery FLWOR a une instruction de sortie comme continuer et rompre? Par exemple, je veux quitter la boucle for lorsqu'une condition particulière est atteinte.Est-ce que XQuery a une instruction exit pour les expressions FLWOR?
Répondre
Je voudrais savoir si XQuery FLWOR expression a une déclaration de sortie comme continue et break? Par exemple, je veux quitter la boucle lorsqu'une condition particulière est .
XQuery est un langage fonctionnel , qui, entre bien d'autres choses signifie qu'il n'y a pas de notion stricte de l'ordre d'exécution. Par conséquent, toute tentative de faire quelque chose de spécifique quand quelque chose se passe, n'a pas de sens.
L'approche correcte consiste à faire quelque chose si une condition spécifique est satisfaite.
Il n'existe aucun moyen de quitter une expression FLWOR, autre que l'utilisation de la fonction error()
, mais cela met fin au traitement.
Il ne faut pas trop se soucier de l'optimisation - de nombreux processeurs ont de bons optimiseurs.
Ainsi, de nombreux processeurs évalueront paresseusement et arrêtera l'évaluation de l'expression FLOWR ci-dessous, la première fois qu'il produit résultat qui satisfait aux specific-condition()
:
(someFlowerExpression)[specific-condition(.)][1]
XQuery Scripting a une déclaration de sortie:
variable $i := 0;
while(true())
{
$i := $i + 1;
if($i = 3) then
exit returning $i
else();
}
Ou
for $i in (1 to 1000)
return
if($i = 3) then
exit returning $i;
else();
Vous pouvez essayer cet exemple en direct à http://www.zorba-xquery.com/html/demo#JvSLsVh3ZjhvTHecVd9jyE1vEBc=
Il n'y a pas de mots-clés de sortie ou de retour dans XQuery. –
'pour $ i (1 à 1000) où $ i lt 4 retour i $' –
Les deux liens sont morts :( –
Bien que la question soit assez ancienne, je réponds à cela car de nouvelles personnes pourraient faire face à une telle situation et obtiendraient une meilleure solution.
Cette solution fonctionne facilement sur BaseX 7,6
for $i in (1 to 10)
return
if ($i = 3) then
$i
else
exit
sortie sera - 3
OU cela va générer la sortie - 3,
for $i in (1 to 10)
return
if ($i = 3) then
$i
else
()
je ne l'ai pas eu le temps d'essayer cela dans BaseX, mais théoriquement cela rien de sortie , depuis la première fois à travers la boucle, à cause de '$ i = 1' il serait déjà sorti –
@Vincent - J'ai mis à jour la réponse.Le second fonctionne avec BaseX, j'ai testé. SEULEMENT 3. – John
expressions FLWOR ne sont pas des boucles vraiment - il n'y a aucune garantie que les éléments "pour" seront évalués dans un ordre donné, ou même dans un seul fil; ils pourraient tous être faits en parallèle et combinés ensemble à la fois, et tant que la sémantique serait maintenue, cela serait valable. –