Ruby符号与哈希中的字符串

我有这个哈希:

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

事实certificate

 hash[:url] == nil 

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

为什么? 它不应该兼容吗?

由于符号与字符串不同:

 :url == 'url' #=> false 

作为哈希键,它们会有所不同。 也许你在Rails中看到过这种行为? Ruby on Rails使用HashWithIndifferentAccess ,它在内部将所有内容映射到String,因此您可以这样做:

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

:url是一个与String’url 'url'不同的Symbol

 > :ruby == "ruby" => false 

您可以使用to_sto_sym在两者之间来回转换

 > "ruby".to_sym => :ruby > :ruby.to_s => "ruby" 

为什么?—因为:url'url'不同,即:url != 'url'

它不应该兼容吗?—不。