Ruby 符号与哈希中的字符串
Posted
技术标签:
【中文标题】Ruby 符号与哈希中的字符串【英文标题】:Ruby Symbols vs Strings in Hashes 【发布时间】:2012-03-31 13:06:48 【问题描述】:我有这个哈希:
"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"
为什么?它不应该同时使用吗?
【问题讨论】:
【参考方案1】:由于符号与字符串不同:
:url == 'url' #=> false
作为哈希键,它们会有所不同。也许您在 Rails 中看到过这种行为? Ruby on Rails 使用 HashWithIndifferentAccess 在内部将所有内容映射到字符串,因此您可以这样做:
h = HashWithIndifferentAccess.new
h['url'] = 'http://www.google.com/'
h[:url] #=> 'http://www.google.com/'
【讨论】:
它是 Rails。哦,在学习 Ruby 的同时学习 Rails 的生活。 抱歉学究气,但 HashWithInDifferentAccess 实际上只是检查键是否是符号,如果是这种情况,则强制转换为字符串,而不是 github.com/rails/rails/blob/…【参考方案2】::url
是一个 Symbol,它不同于 String 'url'
> :ruby == "ruby"
=> false
您可以使用to_s
和to_sym
在两者之间来回转换
> "ruby".to_sym
=> :ruby
> :ruby.to_s
=> "ruby"
【讨论】:
【参考方案3】:为什么?---因为:url
和'url'
不同,即:url != 'url'
。
不应该同时使用吗?---不。
【讨论】:
以上是关于Ruby 符号与哈希中的字符串的主要内容,如果未能解决你的问题,请参考以下文章