我想在数组中使用字符串元素定义一个方法,例如:
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"
这样的事情可能吗?
显然,这只是我可以做的一件事的一个简单例子,但我在这里真正得到的是如何根据字符串分配方法名称。
答案 0 :(得分:5)
您需要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
答案 1 :(得分:0)
你可以使用define_method(元编程)来实现这一点。
%w(name1 name2).each do |meth|
define_method(meth) { self.attribute == k }
end