Re: Function naming: Problems and proposed solution

> From a first glance it seems to me that allowing default values for arguments (aka keyword arguments or optional arguments) clashes with our ability to define function overloads having fewer arguments. 


I don't think so. The key is that ALL the keyword arguments are combined into a map, which is supplied as the final argument of a function whose signature expects a map as its last argument.

serialize(X) calls serialize#1

serialize(X, method:='json') calls serialize#2 - it's essentially just a shorthand notation for serialize(X, map{'method':'json'}).

serialize(X, method:='json', indent:=true()) also calls serialize#2 - the keyword arguments are combined into a single map value, matching the final argument in the function signature which accepts a map.

What you can't do using this mechanism is to supply an empty map as the second argument. If you want to do that, you just call

serialize(X, map{})

but you don't need to, because the fn:serialize function has been designed so this is equivalent to serialize(X).

Michael Kay
Saxonica

> On 2 Dec 2020, at 16:21, Dimitre Novatchev <dnovatchev@gmail.com> wrote:
> 
> 
> 
> Please, prove me wrong.
> 
> Thanks,
> Dimitre 
> 
> Sent from my iPhone
> 
>> On Dec 2, 2020, at 8:07 AM, Michael Kay <mike@saxonica.com> wrote:
>> 
>> 
>> 
>>> On 2 Dec 2020, at 11:27, Tom Hillman <tom@expertml.com <mailto:tom@expertml.com>> wrote:
>>> 
>>> serialize($x, method: 'json', indent: true())
>>> 
>> 
>> I've had a go at speccing this up: see https://htmlpreview.github.io/?https://github.com/qt4cg/qtspecs/blob/master/specifications/xquery-40/html/xpath-40-diff.html <https://htmlpreview.github.io/?https://github.com/qt4cg/qtspecs/blob/master/specifications/xquery-40/html/xpath-40-diff.html>
>> 
>> Search for "keyword arguments".
>> 
>> I'm liking it.
>> 
>> (I used ":=" rather than ":" as the punctuation, but it's easily changed)
>> 
>> There's a bug in the grammar -- it allows f( , a:= 3 ) -- but hey, it's a first draft.
>> 
>> Michael Kay
>> Saxonica
>> 

Received on Wednesday, 2 December 2020 16:30:22 UTC