Obwohl ich " Ruby-Symbole verstehen " gelesen habe , bin ich immer noch verwirrt über die Darstellung der Daten im Speicher, wenn es um die Verwendung von Symbolen geht. Wenn ein Symbol, von denen zwei in verschiedenen Objekten enthalten sind, am selben Speicherort vorhanden ist, wie kommt es dann, dass sie unterschiedliche Werte enthalten ? Ich hätte erwartet, dass derselbe Speicherort den gleichen Wert enthält.
Dies ist ein Zitat aus dem Link:
Im Gegensatz zu Zeichenfolgen werden gleichnamige Symbole initialisiert und existieren während einer Ruby-Sitzung nur einmal im Speicher
Ich verstehe nicht, wie es gelingt, die im selben Speicherort enthaltenen Werte zu unterscheiden.
Betrachten Sie dieses Beispiel:
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
und patient2
sind beide Hashes, das ist in Ordnung. :ruby
ist jedoch ein Symbol. Wenn wir Folgendes ausgeben würden:
patient1.each_key {|key| puts key.to_s}
Was wird dann ausgegeben? "red"
oder "programming"
?
Ich vergesse Hashes für eine Sekunde und denke, ein Symbol ist ein Zeiger auf einen Wert. Die Fragen, die ich habe, sind:
- Kann ich einem Symbol einen Wert zuweisen?
- Ist ein Symbol nur ein Zeiger auf eine Variable mit einem Wert darin?
- Wenn Symbole global sind, bedeutet das, dass ein Symbol immer auf eine Sache verweist?
puts patient1[:ruby]
, wird "rot" gedruckt, wenn Sie sagenputs patient2[:ruby]
, wird "Programmierung" gedruckt.