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