Незважаючи на прочитання " Розуміння символів 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]
, він надрукує "програмування".