Определение методов на лету в Ruby / Rails - как установить параметры? - PullRequest
1 голос
/ 27 августа 2010

Я пытаюсь определить набор функций, в которых я могу передать данные параметры.

Например, как мне сделать следующее?

>> 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

Ответы [ 2 ]

7 голосов
/ 27 августа 2010

Попробуйте это:

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

1 голос
/ 27 августа 2010

Я не уверен, почему вы бы создали метод таким образом, вместо того, чтобы просто снова открывать класс и вставлять ваш метод, но вы могли бы использовать class_eval вместо:

self.class.class_eval %Q{
  def get_#{key.downcase}_type(...)
    ...
  end
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...