Letting RegExp method return something iterable?

Brendan Eich brendan at mozilla.com
Mon Aug 26 17:38:52 PDT 2013


Forbes Lindesay wrote:
> `String#split` already is iterable because it returns an array.  What 
> it isn't is **lazy**.
>
> To be equivalent to the for code, the let needs to go inside the body 
> of the while, not outside.  This neatly demonstrates the key point:
>
>  - as it stands, writing this kind of code tends to be bug prone (i.e. 
> people get it wrong in confusing ways)
>  - it would be less bug prone if there was just a method that returned 
> an iterable.  That _could_ be an Array, rather than a lazy collection.

Spot on.

Note the Algol family includes languages that allow bindings in if (), 
while (), etc. heads as well as for () -- C++ for example. We talked 
about extending JS this way but for unclear reasons deferred.

/be
>
> On 27 Aug 2013, at 01:20, "Andrea Giammarchi" 
> <andrea.giammarchi at gmail.com <mailto:andrea.giammarchi at gmail.com>> wrote:
>
>> ```javascript
>> {let m; while(m = re.exec(str)) {
>>   // ... no, really
>> }}
>> ```
>> I don't get the need of this but if this is the trend then 
>> String#split needs an iterable too (no!)
>>
>>
>>
>>
>> On Mon, Aug 26, 2013 at 4:23 PM, Brendan Eich <brendan at mozilla.com 
>> <mailto:brendan at mozilla.com>> wrote:
>>
>>     Andrea Giammarchi wrote:
>>
>>         Is it very useful because you wrote for instead of while ?
>>
>>         ```javascript
>>         while (m = re.exec(str))
>>           console.log(m[0])
>>         ;
>>         ```
>>
>>
>>     It is, for two reasons:
>>
>>     1. in JS only for can have a let or var binding in the head.
>>
>>     2. the utility extends to all for-of variations: array
>>     comprehensions, generator expresisons.
>>
>>     /be
>>
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org <mailto:es-discuss at mozilla.org>
>> https://mail.mozilla.org/listinfo/es-discuss


More information about the es-discuss mailing list