Ruby - 迭代并调用方法数组

Ruby - Iterating over and calling an array of methods

假设我有两种方法:

def hello
 'hello'
end

def world
 'world'
end

现在我想以这样的方式调用这些方法:

try_retry{
  hello
}
try_retry{
  world
}

假设 try_retry 是一种在发生错误时重试代码块的方法。有很多这样的方法,所以可以遍历块吗?类似于:

array_of_methods = [hello,world]
array_of_methods.each do |method|
  try_retry{
    method
  }
end

问题是在这一行评估的方法:

array_of_methods = [hello,world]

你可以做到

array_of_methods = [method(:hello), method(:world)]

你可以这样称呼他们

array_of_methods.each { |m| m.call }

假设您有方法 helloworld。如果你想在遍历它们的同时调用这些方法,你可以这样做

['hello', 'world'].each do |m|
  send(m)
end

根据此方法名称数组的来源,您可能不希望调用私有或受保护的方法,因此 public_send 将仅允许调用 public 方法。

array_of_methods = ['hello', 'world']

array_of_methods.each {|m| public_send(m)}