Символы похожи на строковые литералы в том смысле, что разделяют одно и то же пространство памяти, но важно отметить, что они не строковые эквиваленты.
В Ruby, когда вы набираете "this"
и "this"
, вы используете две разные области памяти;используя символы, вы будете использовать только одно имя во время выполнения программы.Поэтому, если вы наберете :this
в нескольких местах вашей программы, вы будете использовать только одно.
С Символ Документ:
Объекты символов представляют имена и некоторые строки внутри интерпретатора Ruby.Они генерируются с использованием синтаксиса литералов :name
и :"string"
и различными методами to_sym
.Один и тот же объект Symbol будет создан для данного имени или строки на время выполнения программы, независимо от контекста или значения этого имени.Таким образом, если Fred
является константой в одном контексте, методом в другом и классом в третьем, Символ :Fred
будет одним и тем же объектом во всех трех контекстах.
Таким образом, вы в основном используете его там, где хотите трактовать строку как константу.
Например, очень часто его используют с методом attr_accessor
, чтобы определить getter / setter для атрибута.
class Person
attr_accessor :name
end
p = Person.new
p.name= "Oscar"
Но это будет делать то же самое:
class DontDoThis
attr_accessor( "name" )
end
ddt = DontDoThis.new
ddt.name= "Dont do it"