Ruby符号与哈希中的字符串

时间:2012-03-15 01:12:35

标签: ruby string hash symbols

我有这个哈希:

{
  "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"

为什么呢?它不应该兼有吗?

3 个答案:

答案 0 :(得分:23)

由于符号与字符串不同:

:url == 'url' #=> false

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

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

答案 1 :(得分:4)

:urlSymbol,与String 'url'

不同
> :ruby == "ruby­"
=> false

您可以使用to_sto_sym

在两者之间来回转换
> "ruby".to_­sym
=> :ruby
> :ruby.to_s
=> "ruby"

答案 2 :(得分:2)

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

它不应该兼容吗?---否。