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

Eli*_*off 7 ruby

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

aku*_*uhn 10

你当然可以.

试试这个

FatalError = ObjectSpace.each_object(Class).find { |klass| klass < Exception && klass.inspect == 'fatal' }
Run Code Online (Sandbox Code Playgroud)

然后

raise FatalError.new("famous last words")
Run Code Online (Sandbox Code Playgroud)

这是如何运作的?

  • fatal 是一个没有相关顶级常量的内部类
  • ObjectSpace.each_object(Class) 枚举所有类
  • find { ... } 找到一个名为"致命"的异常类

但是,尽管它的名字fatal并不特别,但它可以获救.如果您正在寻找一种方法来结束您的计划,也许最好打电话给全球exit方法?

begin
  raise FatalError.new
rescue Exception => e
  puts "Not so fatal after all..."
end
Run Code Online (Sandbox Code Playgroud)

  • 虽然这是一个巧妙的技巧(+1),但它不是应该在生产代码中使用的东西.直接退出或引发正常异常. (2认同)