我想知道如何调用具有不同名称的方法。我有:
queries = ['new_teachers']
我想使用对new_teachers
等数组元素的引用来调用模块DailyQueries
上的方法DailyQueries[queries[i]]
,这应该等同于DailyQueries.new_teachers
。非常感谢任何帮助。
答案 0 :(得分:2)
您可以使用public_send
方法在对象上调用任意方法。例如,foo.public_send(:bar)
相当于foo.bar
,其工作方式完全相同。
了解这一点,你可以定义一个符号数组,其中每个符号都是你想要调用的方法。所以:
[:bar, :baz, :qorg].each {|method|
DailyQueries.public_send(method)
end
的工作原理如下:
DailyQueries.bar
DailyQueries.baz
DailyQueries.qorg
如果您想了解有关public_send
方法的更多信息以及较少隐私尊重的表亲send
方法,请参阅以下阅读材料:
答案 1 :(得分:1)
如果你只需要一种方法来调用方法,如果变量有方法名字符串,那么请参考@sawa的答案。如果由于某些特定原因,您需要使用[]
语法调用模块方法,那么请继续阅读。
如果你说方法是模块的一部分,那么,它必须是它的单例方法,如下所示,只有这样,你才能使用DailyQueries.new_teachers
语法调用它
module DailyQueries
def self.new_teachers
["A", "B"]
end
end
您无法使用[]
语法调用模块方法 - 因此,您可能需要向模块中添加一个方法来为您执行此操作。
module DailyQueries
def self.[] name, *params
method(name)[*params]
end
#... other methods definitions
end
现在,你可以这样做:
DailyQueries[queries[0]]
如果方法有任何参数,您可以将参数传递为:
DailyQueries[queries[0], "param1", "param2", :another_param]
答案 2 :(得分:-2)
DailyQueries.send(queries[i])
....................