【问题标题】:Ruby Symbols vs Strings in HashesRuby 符号与哈希中的字符串
【发布时间】: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"

为什么?它不应该同时使用吗?

【问题讨论】:

    标签: ruby string hash symbols


    【解决方案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'

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 2020-12-13
        • 1970-01-01
        • 1970-01-01
        • 2021-03-26
        • 1970-01-01
        相关资源
        最近更新 更多