如何提出致命的异常红宝石?

时间:2017-01-07 05:34:00

标签: ruby

Ruby有一个fatal例外,但没有关于如何raise的指导,我无法弄明白。如何在Ruby中引发fatal异常?

2 个答案:

答案 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

如果这个异常类是供我们使用的,那么它将随时可用,而不是隐藏起来。