0

可以说我有两种方法:

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]
4

3 回答 3

1

你可以做

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

你可以这样称呼他们

array_of_methods.each { |m| m.call }
于 2016-10-20T18:42:55.690 回答
0

假设您有方法helloworld. 如果您想在迭代它们时调用这些方法,您可以这样做

['hello', 'world'].each do |m|
  send(m)
end
于 2016-10-20T18:43:07.653 回答
0

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

array_of_methods = ['hello', 'world']

array_of_methods.each {|m| public_send(m)}
于 2016-10-20T19:25:11.590 回答