Nonostante abbia letto " Capire i simboli di Ruby ", sono ancora confuso dalla rappresentazione dei dati in memoria quando si tratta di usare i simboli. Se un simbolo, due dei quali contenuti in oggetti diversi, esiste nella stessa posizione di memoria, allora come mai contengono valori diversi ? Mi sarei aspettato che la stessa posizione di memoria contenesse lo stesso valore.
Questa è una citazione dal link:
A differenza delle stringhe, i simboli con lo stesso nome vengono inizializzati ed esistono in memoria solo una volta durante una sessione di ruby
Non capisco come riesca a differenziare i valori contenuti nella stessa locazione di memoria.
Considera questo esempio:
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
e patient2
sono entrambi hash, va bene. :ruby
tuttavia è un simbolo. Se dovessimo produrre quanto segue:
patient1.each_key {|key| puts key.to_s}
Quindi cosa verrà prodotto? "red"
o "programming"
?
Dimenticando gli hash per un secondo, penso che un simbolo sia un puntatore a un valore. Le domande che ho sono:
- Posso assegnare un valore a un simbolo?
- Un simbolo è solo un puntatore a una variabile con un valore in essa?
- Se i simboli sono globali, significa che un simbolo punta sempre a una cosa?
puts patient1[:ruby]
, stamperà "rosso", se diciputs patient2[:ruby]
, stamperà "programmazione".