From: Pit Capitain Date: 2005-08-03T01:35:52+09:00 Subject: Re: enum collection of constant values Jim Menard schrieb: > 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...) > > Use symbols. They are similar to strings, but every use of the same > symbol uses the same value, and they are very compact. > > state = :none > state = :good if all_is_well > # ... > state = :logic_error ... and for a set of values use the class Set. Regards, Pit