Ruby - 重构以处理不同类型的错误

时间:2013-09-24 02:45:44

标签: ruby refactoring

我有一个对象作为其他几个父对象。它有一个类似的方法:

class Parent
  def commit
    begin
    ...
    rescue => e
    ...
    end
  end
end

class ChildA < Parent
end

class ChildB < Parent
end

但是,当ChildA抛出特定类型的错误commit时,UniqueError必须以独特的方式行事。我可以覆盖该函数的整个commit文件,但这感觉很尴尬。如果我需要更改begin部分中的正文,它会解决问题,因为我现在需要在两个地方更改它。

重构这个最简洁的方法是什么?

1 个答案:

答案 0 :(得分:4)

您不应该使用rescue => e吞下所有类型的例外。这行代码应该几乎不存在。您的异常处理程序应该只捕获它可以有意义地从中恢复的异常类型。

更改您的Parent,使其不会吞下所有异常,然后在Child类中捕获它们:

class Parent

  def commit
    # ...
  end 

end

class Child < Parent
  def commit
    begin
      super
    rescue UniqueError => e
      # ...
    end
  end
end