Ruby有一个fatal
例外,但没有关于如何raise
的指导,我无法弄明白。如何在Ruby中引发fatal
异常?
答案 0 :(得分:10)
当然可以。
试试这个
FatalError = ObjectSpace.each_object(Class).find { |klass| klass < Exception && klass.inspect == 'fatal' }
然后
raise FatalError.new("famous last words")
这是如何运作的?
fatal
是一个内部类,没有关联的顶级常量ObjectSpace.each_object(Class)
枚举所有类find { ... }
找到一个名为&#34; fatal&#34; 但是,尽管名称fatal
并不特别,但它可以获救。如果您正在寻找一种方法来结束您的计划,也许最好调用全局exit
方法?
begin
raise FatalError.new
rescue Exception => e
puts "Not so fatal after all..."
end
答案 1 :(得分:1)
简短的回答是,你可以,但可能不应该。此异常保留给Ruby内部。通过使用全小写标识符作为常量,它对用户有效隐藏。 (Ruby不会进行常量查找,除非标识符以大写字符开头。)
fatal
NameError: undefined local variable or method `fatal' for main:Object
使用Object#const_get
:
Object.const_get(:fatal)
NameError: wrong constant name fatal
如果这个异常类是供我们使用的,那么它将随时可用,而不是隐藏起来。