I'll give it a shot:
* Symbols are an idea borrowed from lisp. They are immutable,
atomic, named, globally unique values with an efficient internal
storage.
* immutable, like (say) nil or an integer, in that you
can't change them, give them new values, update them,
etc.
* atomic in that you can't "take apart" a symbol or "peek
inside it" like you can with a string
* named, in that each symbol has a human-readable form
(unlike, say, pointers)
* globally unique in that if a symbol is referenced
anywhere in the program it is the same object that the
same reference would get you anywhere else. This is the
same way integers work (7 is 7, no matter where it
occurs in the program), but unlike how arrays and
strings work (you can, for example, have the string
"seven" in several places in your program, and they are
NOT the same object).
* efficient in that they are usually implemented as
something like an integer or a pointer, and thus are
quick to compare, small to store, etc.
* Symbols are used wherever they are useful.
* Symbols fill a roll in ruby (and in lisp) something like
enumerated types in pascal--in fact, if you single
imagined a pre-existing enumerated type containing all
possible values, that would work sort of like symbols.
* Symbols can be used for arbitrary state or condition
labels (e.g. :male/:female, :jan, :feb, :mar...,
n,
ff,:standby,
ut_of_service,... :reverse,:neutral,
:first,:second,:third,
verdrive etc.)
* Symbols can be used as "exceptional" values (e.g.
:not_a_number, :to_be_determined, etc.) much as nil or
-1 often are, but in a way that is much easier to read.
They are much more efficient than strings, which are
often also used in such contexts
If that doesn't help, let me know and I'll try to dredge up some online
references--or you can always google.
-- MarkusQ