Why do generator expressions return generators?

David Bruant bruant.d at gmail.com
Fri Sep 6 08:59:12 PDT 2013


Le 06/09/2013 17:39, Brendan Eich a écrit :
> Brandon Benvie wrote:
>> I don't think you're missing anything. They seem to be more 
>> accurately described as Iterator Expressions than Generator 
>> Expressions. It might be interesting if you could use yield inside 
>> them, which would then make sending a value in useful. But without 
>> that they don't expose any generator interface externally. 
>
> They could be called something else, for sure. The name works because 
> they're sugar for a generator function immeidately invoked:
>
> (for (x of [1,2, 3])  x * x)
>
> is
>
> (function*() { for (let x of [1,2, 3])  yield x * x; })()
There is also a non-generator desugaring (exercise left to the reader).

> The name also may have Python roots that predate Python 2.5's more 
> complete (send as well as next; throw; close) generator interface.
>
> I think we should keep the name, because it's more precise. Iterator 
> expression could be taken to mean other things a bit too easily.
I don't really care for the name, but I agree with Domenic that there is 
no need for the expression to create a generator.
The presence of .next and .throw will be unnecessarily confusing to authors.

David


More information about the es-discuss mailing list