Ruby帮助动态方法

时间:2010-11-23 06:23:13

标签: ruby

我需要一些帮助来定义动态方法。

基本上,我有很多类位于一个模块中。我需要根据传入的字符串列表生成每个类中的方法列表,这些字符串特定于每个类(即不同的类具有不同的字符串列表)。该方法的主体应该是这样的:

client.call(the_string, @an_instance_variable)

所以基本上我想创建一个方法,我可以在同一个模块中的每个类中使用它,以便根据传递的字符串数组动态生成一堆方法。

类似的东西:

register_methods @@string_array

所以说“name”是数组中的一个字符串,然后它会生成一个方法:

def name
  client.call("name", @an_instance_variable)
end

我希望这是有道理的。经过几个小时尝试各种各样的事情后我感到难过,并且非常感谢任何输入。谢谢!

2 个答案:

答案 0 :(得分:4)

没有可用的irb,但这应该有效

def register_methods strings
  strings.each do |s|
    define_method s.to_sym do
      client.call("name", @an_instance_variable)
    end
  end
end

答案 1 :(得分:0)

我不知道您打算如何使用@an_instance_variable,但您也可以定义带有这样的参数的方法:

def register_methods *methods
  methods.each do |method|
    define_method method do |arg|
      client.call(method, arg)
    end
  end
end

因此,如果您发送register_methods(“name”,“age”),您将有两个新方法:

def name(arg)
  client.call("name", arg)
end

def age(arg)
  client.call("age", arg)
end