Dear Wouter,

There is one more important difference on the syntactic level.

With the arrow operator, the left-hand-side is implicitly bound to the first 
parameter of the function.

@address => replace(@postcode, "", "q")

is the same as

replace(@address, @postcode, "", "q")


With the simple map operator, the context item must be explicitly referred to, 
like so:

@address ! replace(., @postcode, "", "q")


What may create confusion is that some functions have several signatures, some 
of which implicitly refer to the context item. But this is a very different 
mechanism.

For example :

@address ! string(.) (: explicitly passed context item :)
@address ! string() (: context item passed implicitly to string#0, which is 
context-dependent)
@address => string() (: context item passed implicitly to string#1 via the => 
operator, but string#1 is context-independent)

I hope I got it right!

Kind regards,
Ghislain


> On 2 Aug 2017, at 11:27, W.S. Hager <wsha...@gmail.com> wrote:
> 
> Hi Michael,
> 
> The way you used the arrow operator in the example would be the way I 
> expected it to work, namely by explicitly addressing the context, but it 
> seems that it doesn't. It's actually implicitly binding the first argument of 
> the function on the right to the value on the left. Or is there an exception 
> I don't know about?
> 
> Thanks.
> 
> Op 1 aug. 2017 18:58 schreef "Michael Kay" <m...@saxonica.com>:
> In the case of singletons there's very little difference, but (as I now see 
> Christian has pointed out), with sequences the effect is quite different.
> 
> Also, of course, "!" changes the context item, so
> 
> @address => replace(@postcode, "", "q") works, while
> 
> @address ! replace(@postcode, "", "q") doesn't.
> 
> Michael Kay
> Saxonica
> 
> > On 1 Aug 2017, at 13:27, W.S. Hager <wsha...@gmail.com> wrote:
> >
> > Hi,
> >
> > Is there any advantage to using the 3.1 arrow operator over the simple map 
> > operator?
> >
> > $string => upper-case() => normalize-unicode() => tokenize("\s+")
> >
> > versus
> >
> > $string ! upper-case(.) ! normalize-unicode(.) ! tokenize(.,"\s+")
> >
> > Thanks,
> > Wouter
> > _______________________________________________
> > talk@x-query.com
> > http://x-query.com/mailman/listinfo/talk
> 
> 
> _______________________________________________
> talk@x-query.com
> http://x-query.com/mailman/listinfo/talk


_______________________________________________
talk@x-query.com
http://x-query.com/mailman/listinfo/talk

Reply via email to