在Ruby中编写'如果它不起作用,修复它并再试一次'功能的正确方法

时间:2015-08-12 18:01:48

标签: ruby design-patterns accessor rescue

我有一个不可避免间歇性的存取对象。有时,当它尝试操作时,其内部崩溃并需要在重新尝试操作之前重新启动。

编写像:

这样的函数很容易
def might_break
    try_something_that_might_break
rescue
    fix_it
    might_break
end

当然,使用计数器可以避免无限的破损。

但我想保持干燥,我的每个访问者方法都需要非常相同的照顾。

我考虑过制作一个带有块的函数safely,但后来我不确定如何将它返回到父函数。

提前致谢!

1 个答案:

答案 0 :(得分:1)

你的意思是这样吗?

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

使用safely(5) {your_broken_method}

进行调用