请参阅名称不同的方法

时间:2016-02-05 03:20:14

标签: ruby

我想知道如何调用具有不同名称的方法。我有:

queries = ['new_teachers']

我想使用对new_teachers等数组元素的引用来调用模块DailyQueries上的方法DailyQueries[queries[i]],这应该等同于DailyQueries.new_teachers 。非常感谢任何帮助。

3 个答案:

答案 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])

....................