Variáveis e símbolos são coisas diferentes. Uma variável aponta para diferentes tipos de dados. Em Ruby, um símbolo é mais parecido com uma string do que com uma variável.
Em Ruby, uma string é mutável, enquanto um símbolo é imutável. Isso significa que apenas uma cópia de um símbolo precisa ser criada. Assim, se você tiver
x = :my_str
y = :my_str
:my_str
será criado apenas uma vez e x
e y
apontarão para a mesma área de memória. Por outro lado, se você tiver
x = "my_str"
y = "my_str"
uma string contendo my_str
será criada duas vezes , e x
e y
apontarão para instâncias diferentes.
Como resultado, os símbolos são frequentemente usados como o equivalente a enums em Ruby, bem como chaves para um dicionário (hash).