本博客系列翻译自 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(rb_warn0) 变成 exception(compile_error),值得注意的是,这个修改是实验性的,所以在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)
复制代码