如何`救援$!`工作?

时间:2013-02-09 10:46:16

标签: ruby exception-handling

我知道全局变量$!包含最新的异常对象,但我对下面的语法感到困惑。任何人都可以帮我理解以下语法吗?

 rescue $!

1 个答案:

答案 0 :(得分:9)

此构造可防止异常停止程序并使堆栈跟踪冒泡。它还将该异常作为值返回,这可能很有用。

a = get_me_data rescue $!

在此行之后,a将保留请求的数据或异常。然后,您可以分析该异常并采取相应措施。

def get_me_data
  raise 'No data for you'
end

a = get_me_data rescue $!
puts "Execution carries on"

p a
# >> Execution carries on
# >> #<RuntimeError: No data for you>

更现实的例子

lines = File.readlines(filename) rescue $!

您要么获取行或错误(如果文件不存在,您没有权限等)。无论如何,执行不会停止。