Symbol x String

7 respostas
N

Qual a diferença em Ruby. Por exemplo:

a = Hash.new
a[‘aqui’] = ‘here’

puts a[:aqui] # => nil

???

puts “aqui” == "aqui # => nil

???

7 Respostas

rubinelli

nadele:

Qual a diferença em Ruby. Por exemplo:

a = Hash.new
a[‘aqui’] = ‘here’

puts a[:aqui] # => nil

???


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.

nadele:

puts “aqui” == "aqui # => nil

???


“aqui” == “aqui” retorna true. O nil que você viu é o retorno do puts:

irb(main):001:0> puts "aqui" == "aqui" true => nil

tnaires

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.

saoj

C:\java>irb
irb(main):001:0> puts "aqui" == :aqui
false
=> nil
irb(main):002:0> exit

nbluis

No blog do akita tem um post sobre simbols bem esclarecedor.

http://www.akitaonrails.com/2007/11/26/ruby-symbols

Paulo_Silveira

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).

faq
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:~$
tnaires

Um artigo sobre símbolos que eu vi no fórum do curso de Ruby on-line:

http://www.troubleshooters.com/codecorn/ruby/symbols.htm

Criado 29 de fevereiro de 2008
Ultima resposta 1 de mar. de 2008
Respostas 7
Participantes 7