Ah yes, so default value can't do the job in any case where undefined is
differentiated from missing, similar to how directly comparing the named
binding to undefined can't differentiate either.


On Sun, Dec 23, 2012 at 11:08 PM, Allen Wirfs-Brock
<[email protected]>wrote:

> Won't work for an explicitly pass undefined because that triggers
> assignment of the default value
>
>
> Axel Rauschmayer <[email protected]> wrote:
>
> How about the following solution?
>
>     let missingArgument = {}; // or a symbol
>     function reduce(callback, initial = missingArgument){
>         let startIndex;
>
>         if (initial === missingArgument) {
>             initial = this[0];
>             startIndex = 1;
>         } else {
>             startIndex = 0;
>         }
>
>         ...etc...
>     }
>
> On Dec 24, 2012, at 3:32 , Allen Wirfs-Brock <[email protected]>
> wrote:
>
> On Dec 23, 2012, at 5:35 PM, Brandon Benvie wrote:
>
> Here's one of the examples that was sticking out in my mind earlier that
> Brendan's solution takes care of. Array.prototype.reduce requires that if
> the initial value isn't provided then the first value of the array is the
> initial value.
>
> Using rest:
>
>    function reduce(callback, ...initial){
>      var current, index;
>
>      if (initial.length) {
>        index = 0;
>        current = initial[0];
>      } else {
>        index = 1;
>        current = this[0];
>      }
>
>      ...etc...
>    }
>
>
> the way I would express this example  is:
>
> function reduce(callback, ...rest){
>  var current, index;
>  if (rest.length > 0) {
>        index = 0;
>        current = rest[0];
>      } else {
>        index = 1;
>        current = this[0];
>      }
>  ...etc...
> }
>
> which seems to exactly express the intent
>
>
> --
> Dr. Axel Rauschmayer
> [email protected]
>
> home: rauschma.de
> twitter: twitter.com/rauschma
> blog: 2ality.com
>
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to