Re: Omissions in IDL sequence and IDL array conversion to ES array

João Eiras:
>>> Is it really an issue ? Are there overloaded APIs which support both
>>> dictionaries and arrays/sequences ? I don't recall any at the moment. Or
>>> if there was ambiguity, renaming one of the overloads would be an
>>> option.

Cameron McCormack:
>> Currently there are not, but I thought Anne's request to allow this
>> kind of overloading (for the DOM method proposal of having an append()
>> take various kinds of values) was reasonable.

João Eiras:
> I would consider an API which is overloaded with a dictionary and an
> array a really poorly designed API, or any API with overloads even
> (disregarding variable number of arguments) and think it should not be
> encouraged. Instead if the parameter types can be confused (which
> happens easily in languages with weak typing) either by reading code, or
> by using types which at runtime are similar, different method names
> should be preferred.
>
> It is simpler to specify and understand the behavior for
> "appendList(array)" and "appendDict(dictionary)" than "append(array)"
> and "append(dictionary)".

I disagree that it would be a really poorly designed API.  In JS 
libraries, it's quite common to inspect the type of value you get as a 
function argument, and as long as the rules are clear, I think it is 
fine.  Having to use separate functions like appendList and appendDict, 
if not necessary, would make the API less usable IMO.

>> In the future it will be possible to create an object that has
>> [[Class]] == "Array" (maybe via the proposed <| operator), and jQuery
>> results objects could be real arrays, be allowed as sequence values,
>> and still have custom prototypes to hold all of the jQuery methods.
>
> That would be a really nice thing, but if there isn't a solution the
> whole overloading feature is less flexible.

If we continue to allow any non-Array object to be used for sequence<T> 
etc. then we won't be able to allow overloading dictionaries vs arrays 
in the future.

I'm not convinced that disallowing ({ length: n }) objects like jQuery 
result objects is a big problem.  If anyone else feels like it would be, 
please speak up.

Received on Monday, 23 January 2012 03:12:56 UTC