From: Patrick Hurley Date: 2005-08-03T01:57:00+09:00 Subject: Re: enum collection of constant values Oops I had not read your whole message. To handle the binary one, I think you would need to drop into some real code: module Kernel def enum(*syms) index = 0 puts self puts self.send(:binding) syms.each do |sym| eval "#{sym.to_s} = #{index}" index += 1 end end def binary_enum(*syms) index = 1 syms.each do |sym| eval "#{sym.to_s} = #{index}" index *= 2 end end end enum :A, :B, :C binary_enum :X, :Y, :Z would work, but they will always be at the global context. In rite, will we get a way to get the caller's binding? That would be very nice to make this method more versatile. pth On 8/2/05, Patrick Hurley wrote: > Not quite perfect, but not too bad you can: > > SB_MODA, SB_MODB, SB_MODC = *0..2 > > If your range at the end "goes too far" there is no problem, but if it > comes up short then some of your constants will silently not be > initialized. > > > > On 8/2/05, Garance A Drosehn wrote: > > I'd like to have a set of constants for a class, where their values > > need to be unique, and preferably compact. For instance: > > SB_NONE = 0; SB_GOOD = 1; SB_BAD = 2; SB_LOGIC_ERR = 3; > > SB_MAX = SB_LOGIC_ERR > > > > but if I want to modify this list by adding something in the middle, > > then I have to remember to increment (by hand) all the values > > which come after that new value. > > > > In C, I would do something like: > > typedef enum { SB_NONE, SB_GOOD, SB_BAD, > > SB_LOGICERR } sb_set; > > > > Looking through the pickaxe book, it looks like the closest thing > > I can do is to create an array of words, and then use the indexes > > of where those words are in the array. But that isn't really the > > same thing. I'd like the efficiency of having constant values, > > which would be referred to by name. > > > > (And after I have that for a compact set of values, I'd want a > > similar feature which would give me a bit-wise unique set of > > values. Eg: SB_MODA = 1; SB_MODB = 2; SB_MODC = 4; > > SB_MODD = 8; -- such that I could combine the values together > > using '|', and tell which values were 'or'-ed together to get that > > combined value...) > > > > -- > > Garance Alistair Drosehn = drosihn@gmail.com > > Senior Systems Programmer or gad@FreeBSD.org > > Rensselaer Polytechnic Institute; Troy, NY; USA > > > > >