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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With