rest parameters

Andy Earnshaw andyearnshaw at gmail.com
Wed Oct 7 08:04:41 UTC 2015


Damn, forgot the reply-all button the first time.  Including the original
and reply here, plus my reply inline:

On Tue, 6 Oct 2015 at 19:05 Tab Atkins Jr. <jackalmage at gmail.com> wrote:

> On Mon, Oct 5, 2015 at 6:33 AM, Andy Earnshaw <andyearnshaw at gmail.com>
> wrote:
> > On Sat, 3 Oct 2015 at 00:27 Tab Atkins Jr. <jackalmage at gmail.com> wrote:
> >> A few examples of the ambiguity:
> >>
> >> function f1(...a, b, c) {print arguments}
> >> f1(1) // ([], 1, undefined) or ([], undefined, 1) ?
> >>
> >> function f2(...a, b="default") {print arguments}
> >> f2(1) // ([], 1) or ([1], "default") ?
> >>
> >> function f3(a, b, ...c, d, e) {print arguments)
> >> f3(1,2,3) // (1, 2, [], 3, undefined) or (1, 2, [], undefined, 3) or
> >> (1, undefined, [], 2, 3) or something else?
> >
> >
> > I don't think these are as ambiguous as you say.  For the first and third
> > case, the first possible result you mention in both cases seems pretty
> > natural.  I don't think you could make an argument for the other cases,
> they
> > don't really make any sense.
>
> Let me rename the arguments, then, to make it more obvious:
>
> function f1(...frontOfList, secondToLast, last) {print arguments;}
> f1(1)
> // (frontOfList=[], secondToLast=1, last=undefined)
> // or (frontOfList=[], secondToLast=undefined, last=1)?
>
> It would be difficult to argue, given these argument names, that the
> author intended the first result.  They clearly intended the second
> result.
>

Function arguments are always filled in from left to right, with the
proposed exception in this case being that rest params don't swallow passed
in arguments when arguments.length <= fn.length.  I don't think anyone
coming from a background in writing code would expect the second result,
any more than they would expect:

    function f1 (first, last) { print arguments; }
    f1(1);
    // (first=undefined, last=1)

Unless there's a precedent for this behaviour in a language I'm unaware of.


> This is what I mean by:
>
> > You can come up with answers to these questions.  What you can't do is
> come up with answers that are *obviously correct*.
> ~TJ
>


> I don't know... the first result was "obviously correct" to me ;-).
Admittedly, "obviously correct" can be subjective when defining language
behaviour.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20151007/8e66bcaa/attachment.html>


More information about the es-discuss mailing list