我有一个代码
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