首页 > 解决方案 > 如何引发该方法未引发的错误?

问题描述

我有两个错误类FirstErrorSecondError. 我有一个有风险的方法,可能会引发错误。它可以提高FirstError但不能提高SecondError,我不允许更改给定的方法。

有一段代码我必须显示消息并在SecondError遇到第一个错误时提出。目前我正在做一个补丁修复,这不是一个好习惯。这样做的正确方法是什么(如果有的话)?

class FirstError < StandardError
  def message
    "First Error"
  end
end

class SecondError < StandardError
  def message
    "Second Error"
  end
end

def risky_method # cannot modify
  raise FristError
end

begin
  risky_method
rescue FirstError => e
  e = SecondError.new
  puts e.message
  raise SecondError
rescue => e
  puts e.message
end

标签: ruby-on-railsruby

解决方案


围绕您使用但不拥有的代码编写包装器、捕获低级异常并抛出对您的接口处于正确抽象级别的新异常都是很好的做法。这是 GoF 适配器模式。

这与猴子修补完全不同 - 请参阅https://dzone.com/articles/how-not-to-cut-your-source-with-sharp-knife-as-mon


推荐阅读