Несмотря на то, что я прочитал « Общие сведения о символах Ruby », меня все еще смущает представление данных в памяти, когда дело доходит до использования символов. Если символ, два из которых содержатся в разных объектах, существуют в одной и той же области памяти, то как же они содержат разные значения? Я ожидал, что одна и та же ячейка памяти будет содержать такое же значение.
Это цитата из ссылки:
В отличие от строк, одноименные символы инициализируются и существуют в памяти только один раз во время сеанса работы с ruby.
Я не понимаю, как ему удается различать значения, содержащиеся в одном месте памяти.
Рассмотрим этот пример:
patient1 = { :ruby => "red" }
patient2 = { :ruby => "programming" }
patient1.each_key {|key| puts key.object_id.to_s}
3918094
patient2.each_key {|key| puts key.object_id.to_s}
3918094
patient1
и patient2
оба являются хешами, это нормально. :ruby
однако это символ. Если бы нам нужно было вывести следующее:
patient1.each_key {|key| puts key.to_s}
Тогда что будет на выходе? "red"
, или "programming"
?
Забыв на секунду о хэшах, я думаю, что символ - это указатель на значение. У меня есть следующие вопросы:
- Могу ли я присвоить значение символу?
- Является ли символ просто указателем на переменную со значением в ней?
- Если символы глобальны, означает ли это, что символ всегда указывает на что-то одно?
puts patient1[:ruby]
, он напечатает «красный», если вы скажетеputs patient2[:ruby]
, он напечатает «программирование».