jay*_*jay 1 ruby metaprogramming
我想在数组中使用字符串元素定义一个方法,例如:
ARRAY = ["name1", "name2"]
ARRAY.each do |k|
  def k?
    self.attribute == k
    #or whatever else in here
  end
end
这样我就可以做到以下几点:
article.name1? #would return true of article.attribute == "name1"
这样的事情可能吗?
显然这只是我可能做的一件事的一个简单例子,但我在这里真正得到的是如何根据字符串分配方法名称.
你需要Module#define_method.看一下这个:
class Foo
  attr_accessor :attribute
  ARRAY = ["name1", "name2"]
  ARRAY.each do |k|
    define_method "#{k}?" do
      self.attribute == k
    end
  end
end
f = Foo.new
f.attribute = 'name1'
f.name1? # => true
f.name2? # => false