Nov 18 notes

P T Withington ptw at pobox.com
Tue Nov 23 12:14:39 PST 2010


On 2010-11-23, at 14:14, Brendan Eich wrote:

> On Nov 23, 2010, at 5:19 AM, P T Withington wrote:
> 
>> On 2010-11-22, at 02:37, David Herman wrote:
>> 
>>> if we allowed for-in to be overloaded, I would tell people that they should deprecate the legacy for-in and replace it with an explicit iterator such as:
>>> 
>>>  for (x in keys(obj))
>> 
>> I have learned a mnemonic for for-in: that it is iterating using the `in` operator.  You propose that I unlearn that?  Or in your new hypothetical world does the `in` operator also get overloaded?
> 
> Excellent question. One (Java extension language) answer:
> 
> http://www.cs.cornell.edu/Projects/jmatch/
> 
> Python allows unstratified meta-programming of both its for-in loop/comprehension syntax *and* its |in| operator.
> 
> Harmony Proxies allow meta-programming of |in| already, via the |has| trap. So the answer to your quesiton "does the `in` operator also get overloaded?" is "Yes, but you have to write two traps, iterate and has".

How does the `in` in for-in decide which of it's overloaded meanings applies?  Based on the type of the operand?  Based on the existence of the enumerate or iterate trap on the operand?

And despite the `in` in for-in either enumerating or iterating, the `in` operator only has a single associated trap.  The non-parallelism is bugging me. 

>> Ramdom thought: Can I use destructuring in for-in?
>> 
>> for ({key:value} in enumerable)
>> 
>> for ([value] in iterable)
> 
> Absolutely. Destructuring (separate proposal but composes well) applies to all LHS and binding forms.

I was being too subtle.  I was suggesting something like your JS 1.7 example, where the 'top-level' destructuring is a pattern for the `in` operation.  `{key: value}` means I want the property keys and their values, `[value]` means I want the values, and `key` is (backward-compatible) shorthand for `{key: _}`.  Destructuring iteration over an hash of triples:

  for ({key: [s, v, o]} in tripledb) ...

Too cute?


More information about the es-discuss mailing list