Argument matching

Lars Hansen lhansen at adobe.com
Fri May 9 12:00:21 PDT 2008


> -----Original Message-----
> From: Michael O'Brien [mailto:mob at mbedthis.com] 
> Sent: 9. mai 2008 11:49
> To: Lars Hansen
> Cc: es4-discuss Discuss
> Subject: Re: Argument matching
> 
> > Presumably what you're getting at is that if 'checker' is 
> strict then 
> > it must accept three arguments even if we only care about 
> one.  This 
> > is so.
> > The easiest way to write down a function like that is to 
> use the rest 
> > parameter without a parameter name:
> >
> >  function f(obj, ...) { /* code here */ }
> 
> 
> Agree, but that may have a performance penalty as the extra 
> args must be converted to an array. 

Why would they have to be converted to an array, if that array can't
be referenced?  :)

> One case where strict mode may be faster than standard ;-)
> 
> So that I can write up a bug for the RI, my take on the rules is:
> 
> - In strict mode, the number and types of args must agree. If 
> not, an error is generated.
> 
> - In standard mode, you can supply too many actual 
> parameters, they will be ignored. If you supply too few, 
> undefined will be automatically supplied for the missing args.

In my opinion, yes.  But this has not been discussed extensively,
and not for a long time, so others may have different understanding.

Types must agree in standard mode too, of course (at run-time).

--lars

> The RI exhibits strict behavior in this regard in standard mode.
> 
> Michael
> 
> 
> 
> On May 9, 2008, at 11:37 AM, Lars Hansen wrote:
> >> -----Original Message-----
> >> From: Michael O'Brien [mailto:mob at mbedthis.com]
> >> Sent: 9. mai 2008 11:09
> >> To: Lars Hansen
> >> Cc: es4-discuss Discuss
> >> Subject: Re: Argument matching
> >>
> >> Comments below:
> >> On May 9, 2008, at 10:43 AM, Lars Hansen wrote:
> >>> In strict code ("use strict") the number of passed arguments must 
> >>> match the number of expected arguments.  This has been 
> agreed upon.
> >>
> >> I presume that is at execution time?
> >
> > It is.
> >
> >> So for Array.some in strict mode, the user must supply 3 typed
> > arguments
> >> for the callback.  But in standard mode, they can either 
> do that, or
> > supply
> >> one untyped arg.
> >
> > static function some(object:!Object, checker:Callable,
> > thisObj:Object=null): boolean {
> >    for (let i=0, limit=object.length; i < limit ; i++)
> >        if (i in object)
> >            if (checker.call(thisObj, object[i], i, object))
> >                return true;
> >    return false;
> > }
> >
> > The type of 'checker' used to be Checker:
> >
> >    type Checker = function (*, double, Object):boolean;
> >
> > but that is painful in practice.  The intrinsic instance 
> method still 
> > requires a Checker, though.
> >
> > Presumably what you're getting at is that if 'checker' is 
> strict then 
> > it must accept three arguments even if we only care about 
> one.  This 
> > is so.
> > The easiest way to write down a function like that is to 
> use the rest 
> > parameter without a parameter name:
> >
> >  function f(obj, ...) { /* code here */ }
> >
> > --lars
> 
> 



More information about the Es4-discuss mailing list