在循环中调用方法

时间:2014-05-29 08:17:26

标签: xquery

我有以下方法

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。我做错了什么?

1 个答案:

答案 0 :(得分:3)

作为函数式编程语言,XQuery的变量是不可变的,将它们视为在为当前范围重新定义时隐藏的常量。

XQuery中的循环仅用于处理序列的所有成员,而不是重复将操作应用于(重复更改的)值。

如果你想改为做这种循环,请使用递归