当它似乎没有模块时如何指定Exception?

时间:2013-08-04 19:49:03

标签: ruby exception-handling

我有一些客户端代码,在此示例MyModule中,它定义了一个名为Exception的子模块中的自定义异常。在MyModule中,有一个引用rescue的{​​{1}}块。问题是,当ruby需要是来自核心ruby的基本Exception类时,正在将名称Exception解析为Exception(模块)。这是一个代码说明,以显示我的意思:

MyModule::Exception

结果输出为:

puts Exception
puts Exception.class

module MyModule
    module Exception
        class CustomError < StandardError
        end
    end
end

module MyModule
    puts Exception
    puts Exception.class
end

如果没有可以区分的模块,我如何强制第二个Exception Class MyModule::Exception Module 引用解析为核心ruby Exception类?我已经尝试了Kernel :: Exception并调查是否有一个方法来获取模块,但似乎只有Exception,它产生了类的完全限定名称。

2 个答案:

答案 0 :(得分:1)

如有疑问,您需要为类指定完全限定名称(FQN)。你的例外有这个FQN:

 MyModule::Exception

但是来自核心的异常处于顶层(没有嵌套在任何东西中),所以它的FQN只是

::Exception

是的,您可能不希望拯救核心Exception。这是不好的做法,因为这个处理程序会捕获比你可以处理的更多东西(信号,加载错误等)

答案 1 :(得分:0)

想出来。在云雀中,我尝试了::Exception,这有点奇怪。