Symbol jest "zinternalizowanym" łańcuchem, bardziej przypomina stałą niż cokolwiek innego. Typowy przykład:
account_details = {
:name => 'Bob',
:age => 20
}
tutaj symbole :name
i :age
są kluczami do mieszania. Nie należy ich mylić ze zmiennymi. account_details
jest zmienną.
Zmienna w Ruby to uchwyt do pewnego rodzaju obiektu, który może być symbolem.
Zwykle podczas używania ciągów używa się symboli, co spowodowałoby wiele powtórzeń. Należy pamiętać, że łańcuchy są zwykle odrębnymi obiektami, w których odrębny symbol zawsze odnosi się do tego samego obiektu, dzięki czemu są bardziej wydajne, jeśli są często używane.
Porównaj:
"string".object_id == "string".object_id
# => false
:string.object_id == :string.object_id
# => true
Nawet jeśli te dwa ciągi są identyczne, są one niezależne obiekty ciągów. Kiedy są używane jako klucze dla skrótów, argumentów dla metod i innych typowych przypadków, obiekty te szybko zapełnią twoją pamięć masowymi ilościami duplikacji, chyba że zechcesz użyć tej samej instancji łańcucha. Symbole robią to automatycznie.
Zobacz także "[Co to jest operator dwukropka w Rubim?] (Http://stackoverflow.com/questions/6337897/what-is-the-colon-operator-in-ruby)". –