Pomimo przeczytania „ Zrozumienia symboli rubinowych ”, nadal jestem zdezorientowany reprezentacją danych w pamięci, jeśli chodzi o używanie symboli. Jeśli symbol, dwa z nich zawarte w różnych obiektach, istnieją w tym samym miejscu pamięci, to jak to się dzieje, że zawierają różne wartości? Spodziewałbym się, że ta sama lokalizacja pamięci będzie zawierać tę samą wartość.
To cytat z linku:
W przeciwieństwie do łańcuchów, symbole o tej samej nazwie są inicjowane i istnieją w pamięci tylko raz podczas sesji programu ruby
Nie rozumiem, jak udaje mu się rozróżniać wartości zawarte w tej samej lokalizacji pamięci.
Rozważmy ten przykład:
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
i patient2
oba są hashami, w porządku. :ruby
jednak jest symbolem. Gdybyśmy mieli wyprowadzić następujące dane:
patient1.each_key {|key| puts key.to_s}
Co wtedy zostanie wydrukowane? "red"
lub "programming"
?
Zapominając na chwilę o hashach, myślę, że symbol jest wskaźnikiem do wartości. Mam następujące pytania:
- Czy mogę przypisać wartość do symbolu?
- Czy symbol jest tylko wskaźnikiem do zmiennej zawierającej wartość?
- Jeśli symbole są globalne, czy oznacza to, że symbol zawsze wskazuje na jedną rzecz?
puts patient1[:ruby]
, wydrukuje "czerwony", jeśli powieszputs patient2[:ruby]
, wypisze "programowanie".