On Oct 2, 2016, at 10:50 AM, Awal Garg <[email protected]> wrote:

>> On Oct 2, 2016, at 9:30 AM, Olivier Lalonde <[email protected]> wrote:
>> 
>> So what's the problem with `[...a, last]` that `[...a]` doesn't have? I 
>> still don't get it.
> 
> > Since you don’t know when the iterator produced for `…a` will terminate, 
> > there’s no way to know when you need to stop iterating `…a` and move onto 
> > the next item `last`.

That statement is factually incorrect. There is a simple criteria to know when 
to terminate the iteration for a final rest element, which is when the iterator 
returns a result object with "done": true.

There is no condition to determine when to switch from a non-final rest element 
to some other element. That is a problem which needs to be addressed.

> 
> 
> I think Olivier's point is that there is no way to know when you should stop 
> iterating in the case of `[...a]` either - hence the two cases are 
> equivalently problematic, if at all. Pulling the last element out *when* the 
> iteration stops is a different concern IMO which seems trivial to solve:
> 
> 
> ```
> function destructureTail(it) {
>     let head = [], tail;
>     tail = it.next().value;
>     for (let o of it) {
>         head.push(tail);
>         tail = o;
>     }
>     return { head, tail };
> }
> 
> function* range(from, to) { while(from < to) yield from++; }
> 
> destructureTail(range(0, 0)); // empty iterator: head is an empty array and 
> tail is undefined
> destructureTail(range(0, 1)); // only one element: head is an empty array and 
> tail is the single element
> destructureTail(range(0, 2));
> destructureTail(range(0, 3));
> // destructureTail(range(0, Infinity)); // just hangs, like [...range(0, 
> Infinity)] would hang, which makes sense
> ```
> 
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to