Ruby - перебирая и вызывая массив методов

Допустим, у меня есть два метода:

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]

3 ответа

Решение

Ты можешь сделать

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

И вы можете назвать их как

array_of_methods.each { |m| m.call }

В зависимости от происхождения этого массива имен методов, вы можете не захотеть, чтобы частные или защищенные методы вызывались так public_send будет позволять вызывать только публичные методы.

array_of_methods = ['hello', 'world']

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

Допустим, у вас есть методы hello а также world, Если вы хотите вызывать эти методы во время их перебора, вы можете сделать это так

['hello', 'world'].each do |m|
  send(m)
end
Другие вопросы по тегам