From: Yohanes Santoso Date: 2005-08-03T01:58:28+09:00 Subject: Re: enum collection of constant values Garance A Drosehn writes: > 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; SB_ENUM = {:none => 0, :good => 1, :bad => 2, :logic_err => 4}.freeze SB_MAX = SB_ENUM.values.max value = SB_ENUM[:bad] | SB_ENUM[:logic_err] p SB_ENUM[:invalid_enum_value] # ==> nil YS. > > 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