我试图通过遍历一个常量散列来减少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

09-25 19:47