1

配列内の文字列要素を使用してメソッドを定義したいと思います。例:

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"

このようなことは可能ですか?

明らかに、これは私が行う可能性のある1つのことの単純な例ですが、ここで実際に得ているのは、文字列に基づいてメソッド名を割り当てる方法です。

4

2 に答える 2

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
于 2012-11-19T07:08:40.677 に答える
0

Uはdefine_method(メタプログラミング)を使用してこれを実現できます。

  %w(name1 name2).each do |meth|
  define_method(meth) { self.attribute == k }
  end
于 2012-11-19T07:17:30.193 に答える