Я хотел бы знать, есть ли в выражении xquery FLWOR оператор выхода, например continue и break?
Например, я хочу выйти из цикла for, когда будет достигнуто определенное условие.
Я хотел бы знать, есть ли в выражении xquery FLWOR оператор выхода, например continue и break?
Например, я хочу выйти из цикла for, когда будет достигнуто определенное условие.
Я хотел бы знать, есть ли в выражении xquery FLWOR оператор выхода, например continue и break?
Например, я хочу выйти из цикла for, когда будет достигнуто определенное условие.
XQuery — это функциональный язык, что, среди прочего, означает отсутствие строгой концепции порядка выполнения. Поэтому любые попытки сделать что-то конкретное, когда что-то происходит, не имеют смысла.
Правильный подход — делать что-то, если выполняется определенное условие.
Невозможно выйти из выражения FLWOR, кроме как с помощью error()
, но это прерывает обработку.
Об оптимизации особо беспокоиться не стоит — многие процессоры имеют хорошие оптимизаторы.
Таким образом, многие процессоры будут выполнять вычисления лениво и остановят вычисление приведенного ниже выражения FLOWR, как только он впервые выдаст результат, удовлетворяющий specific-condition()
:
(someFlowerExpression )[specific-condition(.)][1]
XQuery Scripting содержит оператор выхода:
variable $i := 0;
while(true())
{
$i := $i + 1;
if($i = 3) then
exit returning $i
else();
}
Or
for $i in (1 to 1000)
return
if($i = 3) then
exit returning $i;
else();
Вы можете попробовать этот пример вживую по адресу http://www.zorba-xquery.com/html/demo#JvSLsVh3ZjhvTHecVd9jyE1vEBc=
Хотя вопрос довольно старый, я отвечаю на него, поскольку некоторые новые люди могут столкнуться с такой ситуацией и получат лучшее решение.
Это решение будет легко работать на BaseX 7.6.
for $i in (1 to 10)
return
if ($i = 3) then
$i
else
exit
Выход будет - 3
ИЛИ это будет генерировать вывод - 3,
for $i in (1 to 10)
return
if ($i = 3) then
$i
else
()
$i = 1
он уже выйдет.
- person ᴠɪɴᴄᴇɴᴛ; 27.01.2015