[译]Ruby 2.6 会在begin..end 代码块中因为不写rescue 只写 else 而抛出异常[实验性Feature]

本博客系列翻译自 Bigbinary 的 Ruby 2.6 系列, 已得到作者允许。Ruby 2.6.0-preview2 现已发布

Ruby 2.5

在Ruby2.5中,如果我们在 begin..block 代码块中用else 但不用rescue。我们会得到一个警告。 If we use else without rescue inside begin..end block in Ruby 2.5, it gives a warning.

  irb(main):001:0> begin
  irb(main):002:1>    puts "Inside begin block"
  irb(main):003:1>  else
  irb(main):004:1>    puts "Inside else block"
  irb(main):005:1> end
  (irb):5: warning: else without rescue is useless

警告如下:warning: else without rescue is useless,告诉你else 的内容是不会执行的。

Ruby 2.6

Ruby 2.6 就会直接抛出一个异常。这个Commit 的内容就是把Warning(rbwarn0) 变成 exception(compileerror),值得注意的是,这个修改是实验性的,所以在stable 之前请不要把这个作为接下来的事实标准理解。

  irb(main):001:0>  begin
  irb(main):002:1>    puts "Inside begin block"
  irb(main):003:1>  else
  irb(main):004:1>    puts "Inside else block"
  irb(main):005:1>  end
  Traceback (most recent call last):
        1: from /usr/local/bin/irb:11:in `<main>'
  SyntaxError ((irb):3: else without rescue is useless)

原文地址