Dear Wouter,

Indeed, in some cases, whether to use => or ! can be subject to a matter of 
taste.

To put things in perspective, => was introduced in version 3.1, together with 
map and array support. As far as I understand it and looking again at the 
specs, one of the use cases is for => to be used with maps and arrays, in an 
object-oriented style. The XPath and XQuery Functions and Operators 3.1 
specification [1] explicitly gives a few examples:

["a", "b", "c"] => array:get(2)

$array => array:remove($position) => array:insert-before($position, $member)

Kind regards,
Ghislain

[1] https://www.w3.org/TR/xpath-functions-31/


> On 2 Aug 2017, at 12:09, W.S. Hager <[email protected]> wrote:
> 
> That's why, for cases where it's possible, I preferred to write the simple 
> mapping operator, as it's easier to read IMO. 
> 
> 2017-08-02 12:07 GMT+02:00 W.S. Hager <[email protected]>:
> Hi Ghislain,
> 
> Alright, I forgot about fn:replace#4, but the implicit binding is sometimes 
> hard to detect.
> 
> Thanks.
> 
> 
> 2017-08-02 12:04 GMT+02:00 Ghislain Fourny <[email protected]>:
> ... I didn't get it quite right actually. In @address => string(), there is 
> no context item involved, I wrote too fast. :-)
> 
> New attempt:
> 
> @address ! string(.) (: explicitly passed context item :)
> @address ! string() (: context item passed implicitly to string#0, which is 
> context-dependent)
> @address => string() (: @address passed implicitly to string#1 as the first 
> parameter via the => operator, but string#1 is context-independent)
> @address => string(.) (: error: string#2 does not exist :)
> 
> Kind regards,
> Ghislain
> 
> 
> > On 2 Aug 2017, at 12:00, Ghislain Fourny <[email protected]> wrote:
> >
> > 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 <[email protected]> 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" <[email protected]>:
> >> 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 <[email protected]> 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
> >>> _______________________________________________
> >>> [email protected]
> >>> http://x-query.com/mailman/listinfo/talk
> >>
> >>
> >> _______________________________________________
> >> [email protected]
> >> http://x-query.com/mailman/listinfo/talk
> >
> 
> 
> 
> 
> 
> 


_______________________________________________
[email protected]
http://x-query.com/mailman/listinfo/talk

Reply via email to