1

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

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

class ChildA < Parent
end

class ChildB < Parent
end

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

重构这个最干净的方法是什么?

4

1 回答 1

4

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

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

class Parent

  def commit
    # ...
  end 

end

class Child < Parent
  def commit
    begin
      super
    rescue UniqueError => e
      # ...
    end
  end
end
于 2013-09-24T02:59:09.207 回答