[xquery-talk] problem with loops

Michael Kay mhk at mhk.me.uk
Wed Jan 4 09:24:01 PST 2006

> > declare function lcl:caller()
> > {
> >        let $QV1 := request:request-parameter("val1","")
> >        let $count:= 0
> >        let $QV1:= lcl:tracer($QV1)
> > 
> > for $d in /maps/map
> >        let $k:= lcl:rend($QV1)
> >        let $QV2:= $QV1
> >        let $QV1:= lcl:tracer($k)
> >        return $QV2
> > };
> Your problem is that $QV1 is not "overwritten", you can't re-declare
> variables in XQuery. Meaning: the first $QV1 is a completely different
> variable than the second

Some of us argued long and hard that this should be a syntax error (that is,
that you should not be able to declare two variables with the same name),
but we lost the case unfortunately. It's a shame, because even in a language
like Java that does allow variable assignments, using the same name for two
different variables is almost invariably a strong indicator of a programming
error. We've become very familiar over the years with XSLT beginners
attempting to write code like the above: in XSLT 1.0 this gives you a syntax
error, but sadly in 2.0 this is no longer the case.

Michael Kay

More information about the talk mailing list