我有以下方法
declare private function local:get-range($count as xs:integer, $skip as xs:integer, $start as xs:integer, $end as xs:integer) as xs:integer*
{
let $newStart := $end + 1
let $newEnd := $end + $skip
let $endCorrection := if ($newEnd > $count) then ($newEnd = $count) else ()
return ($newStart, $newEnd)
};
它需要一些整数参数并返回一个包含两个整数的数组。
这是我如何使用它
let $start := 0
let $end := 0
for $iteration in (1 to 7)
let $startEnd := local:get-range(7, 1, $start, $end)
let $start := $startEnd[1]
let $end := $startEnd[2]
return $start
我循环7次传递$ start和$ end并且在循环中我更新start和end作为方法调用返回的值。我预计在第一次通话后$ start为1,在第二次通话后为2,依此类推。但它每次都是1。我做错了什么?
答案 0 :(得分:3)
作为函数式编程语言,XQuery的变量是不可变的,将它们视为在为当前范围重新定义时隐藏的常量。
XQuery中的循环仅用于处理序列的所有成员,而不是重复将操作应用于(重复更改的)值。
如果你想改为做这种循环,请使用递归。