[譯]Ruby 2.6 會在begin..end 程式碼塊中因為不寫rescue 只寫 else 而丟擲異常[實驗性Feature]

Madao-3發表於2018-08-02

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

部落格地址

原文地址

相關文章