Hegwin.Me

溯洄从之,道阻且长。溯游从之,宛在水中央。

Ruby 2.5 允许在do/end代码块中使用rescue

Ruby 2.5 allows rescue/ensure inside do/end blocks

本文介绍Ruby2.5的一个新特性:在以前的Ruby版本中,如果你需要用的rescue来捕获和处理异常,你必须要把可能抛出异常的代码放在 begin end 块中,而在Ruby 2.5中,普通的 do end 块中你也可以直接使用 rescue 和 ensure 等异常处理的关键字了。注意这个功能不是向下兼容的,如果使用2.4则会遇到错误。

In Ruby 2.4

(-1).upto(1).each do |i|
  p 8 / i
rescue e
  p e
end

You will get SyntaxError: unexpected keyword_rescue, expecting keyword_end.

In Ruby 2.5

(-1).upto(1).each do |i|
  p 8 / i
rescue e
  p e
end

You will get:

-8
#<ZeroDivisionError: divided by 0>
8
< Back