Ruby 调用哈希值返回 nil



我有一个代码

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

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

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

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

编辑:另外,:note不是note

EDIT2:作为性能调整,我宁愿在方法外部声明note_hash,而不是每次调用方法时都实例化它。把它塞进一个类常量(NOTE_HASH)将是处理它的最好方法。

你硬编码: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

最新更新