FWIW: I’ve blogged about this.
http://www.2ality.com/2011/10/enums.html

On Oct 3, 2011, at 19:03 , Allen Wirfs-Brock wrote:

> Channeling for MarkM, if you use regular objects for the enumeration element 
> values you probably will want to freeze them all so they can't be used as a 
> communications channel.
> 
> You may also want to define them with a null [[Prototype]].  I intended to do 
> that for e in my original formulation for it got lost along the way from my 
> mind to my finders.  For debugging output you might want to capture the 
> string of each numeration element value and provide a toString method.
> 
> Allen
> 
> 
> On Oct 3, 2011, at 2:28 AM, Axel Rauschmayer wrote:
> 
>> Nice one!
>> 
>> It doesn’t even have to be Name.create() – new Object() works just fine. And 
>> you can use switch with this pattern (I ES5-ified the code):
>> 
>> function Enum() {
>>      let e =  {};
>>     Array.prototype.forEach.call(arguments,
>>         function(name) {
>>             e[name] = new Object();
>>         });
>>     return Object.freeze(e);
>> }
>> 
>> var color = Enum("red", "green", "blue");
>> var c = color.green;
>> switch(c) {
>>     case color.red:
>>         alert("red");
>>         break;
>>     case color.green:
>>         alert("green");
>>         break;
>> }
>> 
>> 
>> On Oct 3, 2011, at 1:44 , Allen Wirfs-Brock wrote:
>> 
>>> 
>>> On Sep 30, 2011, at 7:33 PM, Dean Landolt wrote:
>>> 
>>>> 
>>>> 
>>>> On Fri, Sep 30, 2011 at 10:13 PM, Axel Rauschmayer <[email protected]> 
>>>> wrote:
>>>> One language feature from JavaScript that I miss are enums. Would it make 
>>>> sense to have something similar for ECMAScript, e.g. via 
>>>> Lisp-style/Smalltalk-style symbols plus type inference? If yes, has this 
>>>> been discussed already? I feel strange when I simulate symbols with 
>>>> strings.
>>>> 
>>>> 
>>>> ISTM private name objects make a pretty nice stand-in for symbols.
>>> 
>>> function Enum(...names) {
>>>      let e =  Object.create();
>>>      names.forEach(function(n) {e[n] = Name.create()});
>>>     return Object.freeze(e);
>>> }
>>> 
>>> ...
>>> 
>>> const colors = Enum('red,'blue','green',yellow',orange','purple');
>>> backgournd = colors.red;
>>> foreground = colors.blue;
>>> ...
>>> 
>>> 
>>> Allen
>> 
>> -- 
>> Dr. Axel Rauschmayer
>> [email protected]
>> twitter.com/rauschma
>> 
>> Home: rauschma.de
>> Blog: 2ality.com
>> 
> 

-- 
Dr. Axel Rauschmayer
[email protected]

home: rauschma.de
twitter: twitter.com/rauschma
blog: 2ality.com



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

Reply via email to