Apesar de ler " Understanding Ruby Symbols ", ainda estou confuso com a representação dos dados na memória quando se trata de usar símbolos. Se um símbolo, dois deles contidos em objetos diferentes, existe no mesmo local de memória, então como é que eles contêm valores diferentes ? Eu esperava que o mesmo local de memória contivesse o mesmo valor.
Esta é uma citação do link:
Ao contrário das strings, os símbolos com o mesmo nome são inicializados e existem na memória apenas uma vez durante uma sessão de ruby
Não entendo como consegue diferenciar os valores contidos em um mesmo local de memória.
Considere este exemplo:
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
ambos são hashes, tudo bem. :ruby
no entanto, é um símbolo. Se tivéssemos de produzir o seguinte:
patient1.each_key {|key| puts key.to_s}
Então, qual será a saída? "red"
, ou "programming"
?
Esquecendo os hashes por um segundo, estou pensando que um símbolo é um ponteiro para um valor. As perguntas que tenho são:
- Posso atribuir um valor a um símbolo?
- Um símbolo é apenas um ponteiro para uma variável com um valor?
- Se os símbolos são globais, isso significa que um símbolo sempre aponta para uma coisa?
puts patient1[:ruby]
, ele imprimirá "vermelho", se você disserputs patient2[:ruby]
, ele imprimirá "programação".