1

与えられたパラメータを渡すことができる関数のセットを定義しようとしています。

たとえば、次のようにするにはどうすればよいですか?

>> get_1_type("xxx")

V4_RELATIONSHIP_TYPES=[1=>2,3=>4]

V4_RELATIONSHIP_TYPES.keys.each do |key|
 self.class.send(:define_method, "get_#{key}_type".downcase) do
  return GuidInfo.get_or_new(PARAMS, V4_RELATIONSHIP_TYPES[key])
 end
end

# i can call -> get_1_type("xxx") , and get the function called
4

2 に答える 2

7

これを試して:

V4_RELATIONSHIP_TYPES.keys.each do |key|
 self.class.send(:define_method, "get_#{key}_type".downcase) do |param|
  # use param
  return GuidInfo.get_or_new(PARAMS, V4_RELATIONSHIP_TYPES[key])
 end
end

これで、パラメータを使用してメソッドを呼び出すことができます。

get_1_type("xxx")

編集1

Rubyブロックに関するいくつかのリンク:

これから始めましょう

リンク1

リンク2

于 2010-08-26T23:20:44.903 に答える
1

クラスを再度開いてメソッドを挿入するのではなく、なぜそのようにメソッドを作成するのかわかりませんが、class_eval代わりに次を使用できます。

self.class.class_eval %Q{
  def get_#{key.downcase}_type(...)
    ...
  end
}
于 2010-08-26T22:22:24.743 に答える