A pesar de leer " Comprensión de los símbolos de Ruby ", todavía estoy confundido por la representación de los datos en la memoria cuando se trata de usar símbolos. Si un símbolo, dos de ellos contenidos en objetos diferentes, existen en la misma ubicación de memoria, ¿cómo es que contienen valores diferentes ? Habría esperado que la misma ubicación de memoria contenga el mismo valor.
Esta es una cita del enlace:
A diferencia de las cadenas, los símbolos del mismo nombre se inicializan y existen en la memoria solo una vez durante una sesión de ruby
No entiendo cómo se las arregla para diferenciar los valores contenidos en la misma ubicación de memoria.
Considere este ejemplo:
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
y patient2
ambos son hashes, está bien. :ruby
sin embargo es un símbolo. Si tuviéramos que generar lo siguiente:
patient1.each_key {|key| puts key.to_s}
Entonces, ¿qué saldrá? "red"
, o "programming"
?
Olvidando los hash por un segundo, creo que un símbolo es un puntero a un valor. Las preguntas que tengo son:
- ¿Puedo asignar un valor a un símbolo?
- ¿Es un símbolo solo un puntero a una variable con un valor?
- Si los símbolos son globales, ¿significa eso que un símbolo siempre apunta a una cosa?
puts patient1[:ruby]
, imprimirá "rojo", si diceputs patient2[:ruby]
, imprimirá "programación".