ruby-on-rails - 如何引发该方法未引发的错误?
问题描述
我有两个错误类FirstError
和SecondError
. 我有一个有风险的方法,可能会引发错误。它可以提高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
解决方案
围绕您使用但不拥有的代码编写包装器、捕获低级异常并抛出对您的接口处于正确抽象级别的新异常都是很好的做法。这是 GoF 适配器模式。
这与猴子修补完全不同 - 请参阅https://dzone.com/articles/how-not-to-cut-your-source-with-sharp-knife-as-mon
推荐阅读
- machine-learning - 在嵌入式系统上加载经过训练的模型(无库)
- typescript - 带有扩展另一个类的类的打字稿定义文件(自动生成)
- linux - How to access local variables in remote server using ssh
- spring - 谁能解释一下 JdbcClientDetailsServiceBuilder 的使用?
- javascript - 以角度将HTML页面导出为pdf
- javascript - 通过 Chromecast cast_sender.js 流式传输时出错
- mysql - 无论如何,是否只将唯一条目插入到 MYSQL 中的数据透视表中?
- c# - .NET:从域和子文件夹重定向到新域,保留路径和查询字符串,在 web.config 中使用 httpredirect
- python - 如何按顺序合并python3中的3个dict列表
- android - 如何创建一个条形图,如 android 中的图像所示,以秒分钟和小时格式显示时间?