标记Ruby中的异常,解释/替代

时间:2014-11-23 13:32:42

标签: ruby exception-handling

如果您拥有自己的库,我已经阅读了一个标记您自己的例外的提示:

module AcmeHttp
  module Error; end
end

begin
  begin
    raise IOError, "Some IO error"
  rescue Exception => error
    error.extend(AcmeHttp::Error)
    raise
  end
rescue AcmeHttp::Error => error
  puts "Rescued AcmeHttp::Error: #{error}"
end

我不确定error.extend(AcmeHttp::Error)是如何工作的,以及你以后如何使用它进行实际救援。另外,是否有更优雅的方法来标记您自己的库中的异常?

1 个答案:

答案 0 :(得分:0)

Object#extend将一个或多个模块的实例方法添加到接收者对象中。

因此,当您执行error.extend(AcmeHttp::Error)时,实际上是将AcmeHttp::Error模块的实例方法添加到error这是一个例外(实际上是一个类对象)。