我有一些客户端代码,在此示例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
,它产生了类的完全限定名称。
答案 0 :(得分:1)
如有疑问,您需要为类指定完全限定名称(FQN)。你的例外有这个FQN:
MyModule::Exception
但是来自核心的异常处于顶层(没有嵌套在任何东西中),所以它的FQN只是
::Exception
是的,您可能不希望拯救核心Exception
。这是不好的做法,因为这个处理程序会捕获比你可以处理的更多东西(信号,加载错误等)
答案 1 :(得分:0)
想出来。在云雀中,我尝试了::Exception
,这有点奇怪。