0

在这个例子中,我有一些客户端代码,MyModule它在一个名为Exception. 其中MyModule有一个rescue引用Exception. 问题是,当它需要成为核心 Ruby 的基本异常类时,ruby 将名称解析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

当没有模块来区分它时,如何强制第二个Exception引用解析为核心 ruby​​ 类?Exception我已经尝试过 Kernel::Exception 并调查是否有一种方法可以将模块放入其中,但似乎只有#name,它会产生类的完全限定名称。

4

2 回答 2

1

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

 MyModule::Exception

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

::Exception

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

于 2013-08-04T19:52:31.103 回答
0

弄清楚了。在云雀上,我试过::Exception了,这有点奇怪。

于 2013-08-04T19:51:11.310 回答