ruby string hash symbols

Ruby Symbols vs Strings in Hashes



(3)

Tengo este hash:

{ "title"=>"Navy to place breath-test machines on all its ships", "url"=>"http://feeds.washingtonpost.com/click.phdo?i=a67626ca64a9f1766b8ba425b9482d49" }

Resulta que

hash[:url] == nil

y

hash[''url''] == "http://feeds.washingtonpost.com/click.phdo?i=a67626ca64a9f1766b8ba425b9482d49"

¿Por qué? ¿No debería funcionar con ninguno?


¿Por qué? --- Porque :url y ''url'' son diferentes, es decir :url != ''url'' .

¿No debería funcionar con ninguno? --- No.


Como un símbolo no es lo mismo que una cadena:

:url == ''url'' #=> false

Como las teclas hash serían diferentes. Tal vez has visto este comportamiento en Rails? Ruby on Rails usa HashWithIndifferentAccess, que mapea todo a una cadena internamente, por lo que puede hacer esto:

h = HashWithIndifferentAccess.new h[''url''] = ''http://www.google.com/'' h[:url] #=> ''http://www.google.com/''


:url es un símbolo que es diferente de la cadena ''url''

> :ruby == "ruby­" => false

Puede convertir de ida y vuelta entre los dos usando to_s y to_sym

> "ruby".to_­sym => :ruby > :ruby.to_s => "ruby"