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/''