概要
原著者の許諾を得て翻訳・公開いたします。
- 英語記事: Ruby 2.6 raises exception when 'else' is used inside 'begin..end' block without 'rescue' | BigBinary Blog
- 原文公開日: 2018/07/10
- 著者: Rohan Pujari
- サイト: BigBinary
Ruby 2.6先行チェック: begin-end内でrescueのないelseがあると例外を発生(翻訳)
Ruby 2.6シリーズの記事です。Ruby 2.6.0-preview2は最近リリースされました。
Ruby 2.5
begin
-end
ブロック内のelse
にrescue
がない場合、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
begin
-end
ブロック内でrescue
を書かずにelse
だけを書いても意味がないことを警告しています(このputs "Inside else block"
行は、else
があってもなくても実行されてしまいます)。
Ruby 2.6
begin
-end
ブロック内で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)