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_s
和to_sym
在两者之间来回转换
> "ruby".to_sym => :ruby > :ruby.to_s => "ruby"
为什么?—因为:url
和'url'
不同,即:url != 'url'
。
它不应该兼容吗?—不。