Argument matching
Michael O'Brien
mob at mbedthis.com
Fri May 9 12:13:57 PDT 2008
I've only used named rest arguments
function f(obj, ...items)
I forgot you could do:
function f(obj, ...)
you're right - no overhead.
Another RI bug - that form won't work when you invoke it:
**ERROR** MachError: defining out-of-bounds temporary (near a.as:
5:4-5.3)
Michael
On May 9, 2008, at 12:00 PM, Lars Hansen wrote:
>> -----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