Brendan Eich wrote:
Dmitry Soshnikov wrote:

    ```js
    let [x,y] = set; // x='a'; y='b’;
    ```


Would this work actually? :) Destructuring does get property, which wouldn't call set's `get` method.

See http://people.mozilla.org/~jorendorff/es6-draft.html#sec-runtime-semantics-destructuringassignmentevaluation -- destructuring array patterns uses the iteration protocol, which is why the line works as Axel suggested:

js> let set = new Set(['a', 'b']);
js> let [x,y] = set;
js> console.log(x, y)
a b
js> for (let elt of set) console.log(elt)
a
b

But not all iterables are indexable, nor should they be.

As you've pointed out (several times ;-), the odd duck is forEach. Set.prototype.forEach passes element as key and value. But sets cannot be indexed by values (to get booleans, as one might expect -- and even want, occasionally).

Sets should not be indexable but should be iterable. This leaves forEach with the dilemma of having a different signature on Set than Map and Array, or else taking a dummy or redundant parameter as the forEach key. Or we could leave forEach out of Set.prototype -- that's quite a better "different signature"!

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

Reply via email to