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_sto_sym 在两者之间来回转换

> "ruby".to_­sym
=> :ruby
> :ruby.to_s
=> "ruby"

【讨论】:

【参考方案3】:

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

不应该同时使用吗?---不。

【讨论】:

以上是关于Ruby 符号与哈希中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

为啥哈希中的这个字符串键被转换为符号?

将字符串转换为哈希符号的最佳方法

为啥 Ruby 象征着我的哈希键?

ruby 将哈希值转换为排序的字符串数组,以便与另一个哈希值进行比较

如何理解 Ruby 中的符号

如何理解 Ruby 中的符号