Ruby 当它不';好像没有模块?

Ruby 当它不';好像没有模块?,ruby,exception-handling,Ruby,Exception Handling,我有一些客户端代码,在本例中是MyModule,它在名为Exception的子模块中定义了一些自定义异常。在MyModule中,有一个rescue块引用了异常。问题是,ruby正在将名称Exception解析为MyModule::Exception(一个模块),而它需要成为CoreRuby的基本异常类。这里有一个代码说明来说明我的意思: puts Exception puts Exception.class module MyModule module Exception

我有一些客户端代码,在本例中是
MyModule
,它在名为
Exception
的子模块中定义了一些自定义异常。在
MyModule
中,有一个
rescue
块引用了
异常
。问题是,ruby正在将名称
Exception
解析为
MyModule::Exception
(一个模块),而它需要成为CoreRuby的基本异常类。这里有一个代码说明来说明我的意思:

puts Exception
puts Exception.class

module MyModule
    module Exception
        class CustomError < StandardError
        end
    end
end

module MyModule
    puts Exception
    puts Exception.class
end

当没有模块来区分核心ruby
Exception
类时,如何强制第二个
Exception
引用解析该类?我尝试了Kernel::Exception,并调查了是否有方法将模块放入,但似乎只有
#name
,它生成类的完全限定名。

解决了这个问题。在百灵鸟上,我尝试了
::Exception
,这有点奇怪。

如果有疑问,您需要为类指定完全限定名(FQN)。您的异常具有以下FQN:

 MyModule::Exception
但核心的异常位于顶层(不嵌套在任何内容中),所以它的FQN只是

::Exception

是的,您可能不希望营救核心异常。这是一种不好的做法,因为此处理程序将捕获比您能够处理的更多的东西(信号、加载错误等)

我将使用此方法,因为样板文件中关于雨伞捕获的警告不可避免地是值得的。在本例中,它是来自我的客户机的代码,因此我并不完全负责它的编写方式。我同意更具体的异常处理是最好的。
::Exception