5

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

 rescue $!
4

1 回答 1

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 $!

你要么得到这些行,要么得到错误(如果文件不存在,你没有权限等)。在任何情况下,执行都不会停止。

于 2013-02-09T10:49:54.993 回答