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

 rescue $!

最佳答案

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

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

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

关于ruby - `rescue $!`如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14787300/

10-13 05:27