我需要一些帮助来定义动态方法。
基本上,我有很多类位于一个模块中。我需要根据传入的字符串列表生成每个类中的方法列表,这些字符串特定于每个类(即不同的类具有不同的字符串列表)。该方法的主体应该是这样的:
client.call(the_string, @an_instance_variable)
所以基本上我想创建一个方法,我可以在同一个模块中的每个类中使用它,以便根据传递的字符串数组动态生成一堆方法。
类似的东西:
register_methods @@string_array
所以说“name”是数组中的一个字符串,然后它会生成一个方法:
def name
client.call("name", @an_instance_variable)
end
我希望这是有道理的。经过几个小时尝试各种各样的事情后我感到难过,并且非常感谢任何输入。谢谢!
答案 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