Tech Racho エンジニアの「?」を「!」に。
  • 開発

Ruby 2.6先行チェック: begin-end内でrescueのないelseがあると例外を発生(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

Ruby 2.6先行チェック: begin-end内でrescueのないelseがあると例外を発生(翻訳)

Ruby 2.6シリーズの記事です。Ruby 2.6.0-preview2は最近リリースされました

Ruby 2.5

beginendブロック内のelserescueがない場合、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

beginendブロック内でrescueを書かずにelseだけを書いても意味がないことを警告しています(このputs "Inside else block"行は、elseがあってもなくても実行されてしまいます)。

Ruby 2.6

beginendブロック内でrescueを書かずにelseを書いた場合に例外を発生します。コミット140512dでRuby 2.6の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
  Traceback (most recent call last):
        1: from /usr/local/bin/irb:11:in `<main>'
  SyntaxError ((irb):3: else without rescue is useless)

関連記事

Ruby 2.6先行チェック: rangeの終端をnilまたは省略できる(翻訳)

Ruby 2.6先行チェック: Kernel#systemに`exception:`オプションが追加(翻訳)


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。