在 Ruby 中编写“如果它不起作用,修复它并重试”函数的正确方法

Proper way to write an 'If it doesn't work, fix it and try again' function in Ruby

我有一个不可避免地断断续续的访问器对象。有时当它尝试一个动作时,它的内部崩溃并且需要在重新尝试动作之前重新启动。

编写如下函数很容易:

def might_break
    try_something_that_might_break
rescue
    fix_it
    might_break
end

当然要用计数器来避免无限损坏。

但我想让事情保持干燥,我的每一个访问器方法都需要几乎相同的照顾。

我考虑过创建一个函数 safely,它需要一个块,但后来我不确定如何将它 return 到父函数。

提前致谢!

你的意思是这样的吗?

def safely num, &block
  count = 0
  begin
    block.call
  rescue
    count += 1
    retry if count < num
  end
end

safely(5) {your_broken_method}

调用