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

Jim
-- 
Jim Menard, jimm / io.com, http://www.io.com/~jimm
"A language that doesn't affect the way you think about programming, is not
worth knowing." -- Alan J. Perlis