元编程Ruby便捷方法

ard*_*igh 1 ruby metaprogramming

在我的程序中,我使用状态机,并有许多方便的方法.我目前正在创建一个很长的"?"列表 模型中的方法.

def purchase_ready?
    self.current_state == 'purchase_ready'
end

def completed?
    self.current_state == 'completed'
end

def region_prepared?
   self.current_state == 'region_prepared'
end
Run Code Online (Sandbox Code Playgroud)

什么是元编程方式呢?

ard*_*igh 5

......这是一个答案!

感谢这个博客:http://rohitrox.github.io/2013/07/02/ruby-dynamic-methods/

[:purchase_ready, :completed, :region_prepared].each do |method|
   define_method "#{method}?" do
      self.current_state == "#{method}"
   end
end
Run Code Online (Sandbox Code Playgroud)