[NAME]
ALL.misc.comparison.enumsym

[TITLE]
Enum Symbols (C++,Ruby)

[DESCRIPTION]

Dao supports a data type that is roughly a combination  of C++ enum and Ruby symbol type
s. Like in C++, enum symbol in Dao can be declared in the following way, 
     
   1  enum Boolean { False, True }
     
And zero will be associated with False and one will be associated with True.

But unlike in C++, this will not add integer constants named  False and True to the curre
nt namespace, so they have to be accessed in the following way, 
     
   1  bl1 = Boolean::False
   2  bl2 = Boolean::True
     


However, the more convenient way to use this type is to use them as symbols. A symbol is 
an identifier prefixed with a dollar symbol. A symbol is a like a "polymorphic" enum: it 
can be used freely without being fixed to a particular enum type, but its actually value 
will depend on the type of the variable that holds it.

For example, 
     
   1  enum EnumRF{ Real, False }
   2  
   3  A = $False
   4  
   5  B: Boolean = $False
   6  C: EnumRF  = $False
     
Here A will hold a free symbol $False with value zero. And B will hold a symbol $False of
type Boolean with value zero. And C will hold a symbol $False of  type EnumRF with value 
one.

The main difference between Dao enum symbol and C++ enum and Ruby symbol is this polymoph
ic behavior of Dao enum symbol.