A symbol and a variable are two different things. A symbol is
essentially a special kind of literal, just like a number or a string
is. You cannot assign values to symbols, just like you can't assign
values to numbers or strings -- they are their own values. That is, it
makes no sense to say `42 = "banana"`, just as it makes no sense to
say `:banana = 42`.

In this case, the author is using the symbol :largecave to represent a
particular location. The reason why he might prefer a symbol literal
to a string literal is that symbols are immutable. "Immutable" means
that you can't do operations on symbols to change them (unlike, say,
strings). Immutability is a good property because it decreases that
number of surprises you can have, and because it makes reasoning about
your program easier.

~ jf
--
John Feminella
Principal Consultant, BitsBuilder
LI: http://www.linkedin.com/in/johnxf
SO: http://stackoverflow.com/users/75170/



On Tue, Feb 15, 2011 at 19:41, Gaba Luschi <friedoysterlover / gmail.com> wrote:
> Hi,
> Say you have a method in a class that's defined as this:
> (working from Peter Cooper's Beginning Ruby book, p. 155 of the book)
>
> class Dungeon
> .
> .
> .
>
> def start(location)
> @player.location = location
> show_current_description
> end
>
> why is it that when you place the player in the large cave, it's
> my_dungeon.start(:largecave)
>
> instead of
> my_dungeon.start(largecave)
> ?
> why is largecave a symbol?
> Thanks so much!
>
> --
> Posted via http://www.ruby-forum.com/.
>
>