【问题标题】:Ruby calling hash values returns nilRuby 调用哈希值返回 nil
【发布时间】:2016-04-23 02:27:52
【问题描述】:

我有密码

def pitch_class(note)
    note_hash = {:C=>0, :D=>2, :E=>4, :F=>5, :G=>7, :A=>9, :B=>11} 
    note_hash[:note]
end

但每当我尝试调用其中的值时,它都会返回 nil。

pitch_class("C")
#=> nil

如何使用键作为参数调用值? 谢谢!

【问题讨论】:

    标签: ruby hash key-value


    【解决方案1】:

    "C" != :C。因此,pitch_class(:C) 将起作用。

    如果您希望能够接受字符串参数,也可以使用String#to_sym 强制函数内部的参数。或者您可以首先使用字符串键创建哈希。

    编辑:另外,:note 不是 note

    EDIT2:作为性能调整,我宁愿在方法外部声明note_hash,而不是在每次调用方法时都实例化它。将其填充到类常量中 (NOTE_HASH) 将是处理它的最佳方式。

    【讨论】:

      【解决方案2】:

      您硬编码了:note 符号,而不是读取传递给您的方法的参数:

      def pitch_class(note)
          note_hash = {:C=>0, :D=>2, :E=>4, :F=>5, :G=>7, :A=>9, :B=>11} 
          note_hash[note.to_sym]
      end
      

      【讨论】:

        猜你喜欢
        • 2017-03-01
        • 2014-06-15
        • 2023-03-24
        • 2017-03-21
        • 2019-10-24
        • 2016-03-02
        • 2021-11-19
        • 1970-01-01
        • 2011-05-19
        相关资源
        最近更新 更多