我有一个对象作为其他几个父对象。它有一个类似的方法:
class Parent
def commit
begin
...
rescue => e
...
end
end
end
class ChildA < Parent
end
class ChildB < Parent
end
但是,当ChildA
抛出特定类型的错误commit
时,UniqueError
必须以独特的方式行事。我可以覆盖该函数的整个commit
文件,但这感觉很尴尬。如果我需要更改begin
部分中的正文,它会解决问题,因为我现在需要在两个地方更改它。
重构这个最简洁的方法是什么?
答案 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