Le 16/07/2013 19:54, Claus Reinke a écrit :
   // this doesn't work
   function* generator(){
       [1,2,3].forEach( function(x){ yield x } )
   }
I have been thinking and with for..of, I can't find a good reason to use .forEach instead of for..of.
for..of does what you need here with generators too.

This would make generators deep, violating the non-interleaving assumptions
of intermediate callers on the call stack. This is why we accepted
generators only on condition that they be shallow. We knew at the time that
this privileges built-in control structures over user defined ones. The
alternative would have been to omit generators completely. We agree that
shallow generators were worth it, despite this non-uniformity.

While I understand the compromise, and the wish to get in some form
of generators anyway, the discrimination against user-defined control
structures troubles me deeply. It introduces a new language construct
that defies abstraction. It means that we can no longer use functional
abstraction freely, but have to worry about interactions with generators.

For the specific case of forEach et al
What do you mean by "et al"? I don't believe .map, .reduce or .filter are any interesting to use alongside generators.

Even if so, for..of can work too and is decently elegant (YMMV):

    function* g(){
        [1,2,3].map(x => {yield transform(x)})
    }

becomes

    function* g(){
        for(x of [1,2,3]) yield transform(x);
    }

David
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to