What is the main difference between using a symbol (begins with

, and
a variable?
They are two completely different concepts:
- A symbol is an object. It's literal representation is a set of
characters that start with :, but it's a full object with methods,
etc. It has some properties that make them different to other objects,
the most relevant one being that all instances of the literal refer to
the same object:
irb(main):003:0> :test.object_id
=> 87218
irb(main):004:0> :test.object_id
=> 87218
Compare this to, for example, Strings or Arrays:
irb(main):005:0> "test".object_id
=> -610207318
irb(main):006:0> "test".object_id
=> -610213628
irb(main):007:0> [].object_id
=> -610222448
irb(main):008:0> [].object_id
=> -610232888
- A variable is a reference to an object. When you say
a = <some object>
you are creating a local variable that refers to <some object>. That
object could be any object, for example a Symbol:
a = :test
When should we use one over another?
I don't think this question has any sense, as they are completely
different concepts.
Jesus.