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