【发布时间】: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
如何使用键作为参数调用值? 谢谢!
【问题讨论】:
我有密码
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
【讨论】: