Несмотря на чтение "Понимание символов 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]
, он напечатает программирование. - person R.O.S.S   schedule 19.07.2016