У меня есть этот хэш:
{ "title"=>"Navy to place breath-test machines on all its ships", "url"=>"http://feeds.washingtonpost.com/click.phdo?i=a67626ca64a9f1766b8ba425b9482d49" }
Получается, что
hash[:url] == nil
и
hash['url'] == "http://feeds.washingtonpost.com/click.phdo?i=a67626ca64a9f1766b8ba425b9482d49"
Почему?Разве это не должно работать с любым из них?
Поскольку символ не совпадает со строкой:
:url == 'url' #=> false
В качестве ключей хеш-функции они будут другими.Возможно, вы видели такое поведение в Rails?В Ruby on Rails используется HashWithIndifferentAccess , который внутренне отображает все в строку, поэтому вы можете сделать это:
h = HashWithIndifferentAccess.new h['url'] = 'http://www.google.com/' h[:url] #=> 'http://www.google.com/'
:url - это символ , который отличается от String 'url'
:url
'url'
> :ruby == "ruby" => false
Вы можете конвертировать между ними, используя to_s и to_sym
to_s
to_sym
> "ruby".to_sym => :ruby > :ruby.to_s => "ruby"
Почему? --- Потому что :url и 'url' отличаются, т. Е. :url != 'url'.
:url != 'url'
Разве это не должно работать ни с одним?