Argument matching
Lars Hansen
lhansen at adobe.com
Fri May 9 10:43:44 PDT 2008
In strict code ("use strict") the number of passed arguments must match
the number of expected arguments. This has been agreed upon.
I would expect that if too few arguments are passed to a function with
a typed interface then you get a type error unless the missing parameter
has a type that includes "undefined" (ie no conversion takes place).
Signalling an error "because the function has a typed interface" is
a variant, I guess, but it seems like an orthogonal concern.
I would expect excess arguments to typed functions to be ignored
silently,
as they can be picked up by 'arguments' inside the function.
--lars
> -----Original Message-----
> From: es4-discuss-bounces at mozilla.org
> [mailto:es4-discuss-bounces at mozilla.org] On Behalf Of Michael O'Brien
> Sent: 9. mai 2008 10:30
> To: es4-discuss Discuss
> Subject: Argument matching
>
> What should ES4 do when there are too many or too few arguments?
>
> Seems that the RI will apply different behavior depending on
> whether the function arguments are typed or not. This is not
> necessarily unexpected. I just want to nail down the rules as
> the RI and AS3 behave differently in this regard.
>
> Consider:
>
> function fun(a, b) {
> print(a);
> print(b);
> }
>
> Calling this with:
>
> fun(1) prints
> 1
> undefined
>
> fun(1,2,3,4) prints
> 1
> 2
>
> fun(1,undefined)
> 1
> 0
>
> both work without error.
>
> But if either arg is typed:
>
> function fun(a: int, b) {
> print(a);
> print(b);
> }
>
> In this case, the following all get TypeErrors
>
> fun(1)
> fun(1, undefined)
> fun(1,2,3,4)
>
> Interestingly, ASC will coerce "undefined" to 0 if supplied
> with the correct number of arguments and they are typed as ints.
>
> What are the rules for ES4?
>
> - If you type formal arguments, it seems the caller must
> supply the correct number and type of actual parameters
> - If you don't type the formal arguments, you can supply too
> few or too many arguments
> - Should undefined be coerced to 0 if the type is an integer?
>
> Michael
> _______________________________________________
> Es4-discuss mailing list
> Es4-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es4-discuss
>
More information about the Es4-discuss
mailing list