本部落格系列翻譯自 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)
複製程式碼