Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between a symbol and a variable in Ruby? [duplicate]

I am trying to understand what the difference is between a symbol and a variable in ruby. They seemed to do the exact same thing in giving a name that references an object.

I have read that symbols alow for faster programs but I am not sure why or how they are different from variables in any way.

like image 247
Cu1ture Avatar asked Jul 24 '14 20:07

Cu1ture


1 Answers

A symbol is an "internalized" string, it's more like a constant than anything. Typical example:

account_details = {
  :name => 'Bob',
  :age => 20
}

Here the symbols :name and :age are keys for a hash. They are not to be confused with variables. account_details is a variable.

A variable in Ruby is a handle to an object of some sort, and that object may be a symbol.

Normally you employ symbols when using strings would result in a lot of repetition. Keep in mind that strings are generally distinct objects where a distinct symbol always refers to the same object, making them more efficient if used frequently.

Compare:

"string".object_id == "string".object_id
# => false

:string.object_id == :string.object_id
# => true

Even though those two strings are identical, they're independent string objects. When used as keys for hashes, arguments to methods, and other common cases, these objects will quickly clutter up your memory with massive amounts of duplication unless you go out of your way to use the same string instance. Symbols do this for you automatically.

like image 183
tadman Avatar answered Oct 31 '22 09:10

tadman