Qual a diferença em Ruby. Por exemplo:
a = Hash.new
a[‘aqui’] = ‘here’
puts a[:aqui] # => nil
???
puts “aqui” == "aqui # => nil
???
Qual a diferença em Ruby. Por exemplo:
a = Hash.new
a[‘aqui’] = ‘here’
puts a[:aqui] # => nil
???
puts “aqui” == "aqui # => nil
???
[quote=nadele]
Qual a diferença em Ruby. Por exemplo:
a = Hash.new
a[‘aqui’] = ‘here’
puts a[:aqui] # => nil
???[/quote]
Symbol não é automaticamente transformado em string, mas a[:aqui.to_s] retornaria “here”.
Symbols são úteis, especialmente como chaves de uma hash table, porque a implementação de <==> e hash deles é muito eficiente. Mas strings continuam sendo indispensáveis na hora de fazer I/O.
[quote=nadele]
puts “aqui” == "aqui # => nil
???[/quote]
“aqui” == “aqui” retorna true. O nil que você viu é o retorno do puts:
irb(main):001:0> puts "aqui" == "aqui"
true
=> nil
Outra diferença é o object_id:
Se você tiver duas strings ‘tarso’, ambas terão ids diferentes.
Porém, o símbolo :tarso terá o mesmo object_id, não importando a parte do programa.
C:\java>irb
irb(main):001:0> puts "aqui" == :aqui
false
=> nil
irb(main):002:0> exit
No blog do akita tem um post sobre simbols bem esclarecedor.
symbols sao parecidas com Strings do java: sao imutaveis. otimo para usar como chave de hash (apesar de que, pelo que sei, se voce usar String como chave de hash no ruby, ele copia a String, para nao dar problema quando aquela String for alterada).
marcos@vacuo:~$ irb
irb(main):001:0> key = 'key'
=> "key"
irb(main):002:0> h = {key => "foobar"}
=> {"key"=>"foobar"}
irb(main):003:0> h[key]
=> "foobar"
irb(main):004:0> h['key']
=> "foobar"
irb(main):005:0> key = "anotherValue"
=> "anotherValue"
irb(main):006:0> h[key]
=> nil
irb(main):007:0> marcos@vacuo:~$