Ruby的$!仅在救援区保持价值?

huo*_*ocp 5 ruby rescue

begin
  raise 'foo'
rescue
  puts $!.inspect # => #<RuntimeError: foo>
ensure
  puts $!.inspect # => nil
end
puts $!.inspect # => nil
Run Code Online (Sandbox Code Playgroud)

谷歌搜索,但没有找到一个明确的答案.

只是想确认它的生命周期(?)$!,它是否只在一个rescue块内保持价值?

joe*_*son 7

$! 如果没有救援块,则在救援块中或在sure块中有错误:

begin
  raise 'foo'
ensure
  puts $!.inspect # => #<RuntimeError: foo>
end
Run Code Online (Sandbox Code Playgroud)

$!nil在其他任何地方都具有价值。