我试图通过遍历一个常量散列来减少ruby类中的代码量,以便用更少的代码量生成所有需要的方法。
这是我的代码(请随意添加额外的指针,因为我是ruby新手):
ENTRY_HASHES = {
"disbursement" => {
:description => TRANSACTION_DESCRIPTIONS[:disbursement]
}
}
public
ENTRY_HASHES.each do |key, value|
def "#{value}?(amount)"
single_entry(
ENTRY_HASHES[:description]
amount
)
@entry.save
end
end
我从上面得到的期望是这样的(对于条目哈希中的每个哈希):
def disbursement?(value)
single_entry(
"XXXXX",
amount
)
end
相反,我遇到了一个语法错误。任何帮助都将不胜感激!
最佳答案
以下是您的示例:
ENTRY_HASHES = {
"disbursement" => {
:description => 'smth'
}
}
ENTRY_HASHES.each do |key, value|
define_method("#{key}?") do |argument|
puts "#{key}? method called with #{argument}"
puts "you can use hash values: #{value} of course"
end
end
disbursement?('my_arg')
它将输出:
disbursement? method called with my_arg
you can use hash values: {:description=>"smth"} of course