Given that redundant calls to `return()` don’t make a difference (h/t Bergi), 
wouldn’t the iteration protocol be simpler if iterators were always closed 
(versus only if iteration finishes abruptly). The code of generators wouldn’t 
change (`finally` etc.), but “manually implemented” iterators could be written 
without the check in line (A). They’d become simpler and more similar to 
generators and `finally`.

```js
let iterable = {
    [Symbol.iterator]() {
        return {
            next() {
                if (iterationIsDone()) {
                    return { done: true };
                } else {
                    let result = { value: nextValue(), done: false };
                    if (iterationIsDone()) { // (A)
                         cleanUp();
                    }
                    return result;
                }
            },
            return(value) {
                if (! iterationIsDone()) {
                    cleanUp();
                }
                return { value: value, done: true };
            }
        }
    }
}
```

-- 
Dr. Axel Rauschmayer
a...@rauschma.de
rauschma.de



_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to